Pages

Friday, 26 February 2016

Raspberry Pi APN的搭建及Cisco IPSec VPN的使用

[前言]

写这篇的目的仅仅是出于日常需要,它会用到很多技术方面的东西,我力图使这一章变得简单易读。这一篇博客将是一篇综合性的,教你设置路由器映射、DDNS、IPSec VPN、Squid、git。我将会按照我自己安装的顺序来写,特殊部分会有{注*:}。


[连接Cisco IPSec VPN]
由于近来国内对OpenVPN和PPTP VPN的干扰严重,往往会引发封杀服务器IP,因此现在很多都发放IKEv2 VPN或者Cisco IPSec VPN,这里介绍使用Cisco IPSec VPN,我们使用的软件是 vpnc 。
Raspberry Pi 安装的是官方 Raspbian 的系统,在此处下载的 http://www.raspberrypi.org/downloads ,其他版本的系统大同小异。

在使用Raspberry Pi 安装vpnc前(事实上也包括所有vpn程序),请确保你是用网线连接网络,因为如果你的Raspi使用的是WIFI,那么连接VPN时会断网,这似乎是一个BUG
[[安装vpnc]]

sudo apt-get install vpnc

[[配置vpnc]]

默认的vpnc 的配置文件存放在 /etc/vpnc/default.conf (注权限为 0600 ,因此会提示权限问题;Linux开发者不知道为何习惯很差,总是把文件放到/etc/,而实际上应该放入/usr/local/etc ,唉,屌丝就是屌丝),我们需要修改一下,default.conf如下:

IPSec gateway 111.222.111.223
IPSec ID blackberry
IPSec secret heibang
#IKE Authmode hybrid
Xauth username test
Xauth password  123
如果你对Linux/Unix的文本编辑不是很熟悉,那么就使用nano命令,这个如同win下的记事本,
sudo nano /etc/vpnc/default.conf  编辑完后,使用Ctrl+x 进行保存,接着问你yes 还是no 是否保存,就选Y
以上配置是“黑帮合租”的配置,你需要改成你相应的配置,其中IPSec ID 和IPSec secret 就是对应你的[Group ID 和Group secret ,然后注释掉 IKE Auth。
[[启动vpnc]]
sudo vpnc

Connect Banner:
| ====================
| # Blackberry VPN #
| # powered By @bao3 #
| # JAILBREAK GFW #
| # TOUCH WORLD #
| ====================

|
VPNC started in background (pid: 15807)...

[[检验vpn是否成功]]
ip route show

default dev tun0 scope link 
10.0.12.0/24 dev tun0 scope link 
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.200 
111.222.111.223 via 192.168.1.1 dev eth0 src 192.168.1.200

注意看 tun0 一般就是vpn拨号之后的接口,我们看到这里我的vpn服务器给我Raspi分配的IP时 10.0.12.0/24这一段的,然后直接ping 

ping twitter.com

PING twitter.com (199.59.148.10) 56(84) bytes of data.
64 bytes from r-199-59-148-10.twttr.com (199.59.148.10): icmp_req=1 ttl=57 time=313 ms
64 bytes from r-199-59-148-10.twttr.com (199.59.148.10): icmp_req=2 ttl=57 time=339 ms
64 bytes from r-199-59-148-10.twttr.com (199.59.148.10): icmp_req=3 ttl=57 time=340 ms
64 bytes from r-199-59-148-10.twttr.com (199.59.148.10): icmp_req=4 ttl=57 time=349 ms

OK啦,这样我们的Raspi 就可以连接世界了,但是这样还不够,因为如果网络质量不好会造成vpnc断线,我们还需要一个程序来监控vpnc,断线时可以自动连接,这个程序就是vpncwatch。
[[自动监测vpnc]]
你可以到 https://github.com/dcantrell/vpncwatch/downloads 下载  vpncwatch-1.8.1.tar.gz  也可以使用git 来同步源代码下载 
sudo apt-get install git
git clone git://github.com/dcantrell/vpncwatch.git
cd vpncwatch
如果你对自己有信心,就修改 vpncwatch.c 中" 3600 " 为 " 10 " ,也就是原本程序是要1小时才监测一次vpn是否断线,我们需要改成 10s 就监测一次。
但是你不改也没有关系,你其实可以手动指定时间,下面会提到,我比较懒所以才修改 o(∩_∩)o

make

目录下会生成 vpncwatch 这个二进制可执行文件,你可以在当前目录下测试一下:

./vpncwatch
vpncwatch-1.8
Usage: vpncwatch [options] <vpnc executable> <vpnc args>
Options:
-c HOST Hostname or IP address on the VPN to check periodically for
connectivity. If the test fails, vpnc will be restarted.
-p PORT TCP port number to test on HOST.
-i SECS Interval in seconds between VPN host check (default: 3600).
-? Show this screen.
-V Show version.
Examples:
vpncwatch vpnc /etc/vpnc/vpnc.conf
vpncwatch /usr/etc/vpnc --gateway 1.2.3.4 --id ID
vpncwatch -c intranet.corp.redhat.com -p 80 vpnc /etc/vpnc/vpnc.conf
See the man page for vpnc(8) for more information. Please note that
the vpnc executable and vpnc argument list need be at the end of the
vpncwatch command line.
pi@bao3-raspi ~/git/vpncwatch $
接下来我们就使用这个文件来监控vpnc,注意vpncwatch本身就可以启动vpnc,所以你可以不用自己来手动启动vpnc了。
sudo cp ./vpncwatch /usr/local/bin
sudo vpncwatch -c twitter.com -i 10 vpnc 

解释:
1 复制vpncwatch 到系统路径,相当于安装啦~
2 启动vpncwatch ,需要root权限,因此使用 sudo 。后面的 -c twitter.com 意思就是说测试twitter.com作为vpn通断的依据; 而 -i 10 则是测试间隔,设定为10s ,如果你前面自己修改过代码,则这可以省略,其他情况还是继续这样指定的好。
到此为止,Raspi连接VPN的部分已经完成了。
[搭建APN (HTTP)代理]

事实上经过上面的操作,整个Raspi就实时与世界连通了,我们所要做的就是打开Raspi面向国内的通道,方便我们的手持、桌面系统调用,之所以称为APN是因为起初有这个设想是设定到手机 3G APN 那里,其实你可以应用在任何支持代理的环境里。

[[APN软件选取]]
软件可以自己自由选择,例如:
Squid ---- 超级强大的代理缓存服务器软件,目前可以选择squid 2.7或者squid 3,基本功能相仿,对个人来说没有差异;
3Proxy ,小巧的代理服务器软件足以应对个人需求;
Ziproxy,看名字就知道带压缩的服务器软件,可以大大的压缩内容(仅限文本图文,多媒体除外),可以用来给手机3g/2g网络使用,这样省流量也显得网络更快速,但是图片质量会下降,需要注意的是,这会少量增加手机耗电量。
Privoxy,与以上三者相比属于功能齐全但是又稍显轻量的软件,带有网址过滤和自定义访问规则。

我这里选取 Squid3 作为代理,主要是看重它有强大的缓存功能,又可以设定访问IP规则,还可以定义访问网址规则。
[[安装squid3]]
sudo apt-get install squid3
安装完成后squid3自动启动,并且默认监听在 3128端口,可以先验证一下(非必要步骤)

netstat -Npl | grep 3128
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
tcp 0 0 0.0.0.0:3128 0.0.0.0:* LISTEN -


[[配置squid3]]
注*:在此提醒一次,熟练的人可以选用vi,如果对Linux文本编辑不熟悉就使用nano ,上文已经说起过。
sudo vi /etc/squid3/squid.conf

找到 “http_access deny all"这一行,在它的下方插入一行:

http_access allow all

保存,然后重启squid3:
sudo /etc/init.d/squid3 reload

[info] Reloading Squid HTTP Proxy 3.x configuration files.
done.

 [[测试squid3]]

至此,我们这篇文章的工作已经完成90%啦,请坚持下去!我们就差检核APN服务器的工作情况了。你所要做的事就是在你的设备上写上APN地址和端口进行联网测试,我分别举例来说

1 iOS 平台
A 使用WIFI测试
确保你的iOS 使用WIFI 和Raspi在同一个网络,打开 ”设置“-〉”WIFI",点击你的WIFI ID 右边的小箭头 > ,然后看最底下“HTTP代理”,选择“手动”,然后:
服务器    你的Raspi IP
端口       3128
鉴定      (不开,保持默认)

然后打开网页测试一下能不能连接世界

B 使用 3g/2g 移动网络

请搜索下载“APN设置" (app store 中国区),然后打开软件,点击+号新建一个APN。
”APN接入点代码“     请输入你的运营商的接入点,例如联通3g是 3gnet ,移动2g是 cmnet
点击底下的一个文本框(由于软件差异,你使用可能与我的有区别),会让你输入代理IP和代理端口。
代理服务器IP    你的Raspi IP
代理端口           3128

点击保存,回到软件初始页面,找到刚才我们自己定制的APN点击,此时应该会提示你安装新的描述文件,点击”安装“。

注*:特别提示,某些情况下你的ios连接cmcc,chinanet等wifi会有问题,你需要删除此”描述文件“,可以在”设置-通用“里找到。


接下来就体验一下APN上网吧,在3g/2g的移动网络下,其实使用Ziproxy的确是省流量利器,只是我这里的目的仅仅让你领略一下APN风采,后期的东西你可以自己做。

2 windows
我想每一个能把这篇文章看到这里的人,都会明白我们的最终目的是什么,所以在windows平台我就不过多描述操作,最简单傻瓜的方式就是打开IE浏览器的代理设置,写上Raspi ip和端口。高阶人士推介使用Chrome+Switchy Sharp。

3 Linux

..... 不说了
4 android
我手头只有Note2 android 4.0.4 ,低一点的android有可能没有这些菜单,但是可以自己去google play 下载 Proxydroid  这是相当好用的一个工具,基本设置很简单,我这里不描述了。
注*:尽管android 4.0.4可以设置Wifi 代理和3G代理,但是不是全局的,只有程序指定要使用系统代理时才起作用,不过很不幸,大多数的android程序设计者都不指定,因此默认情况下设置了代理也仅仅是系统自带的浏览器可以连接世界。但使用proxydroid后则会方便很多,重要的是它支持PAC文件格式

至此,如果你的系统成功透过APN连接了世界,那么祝贺你,已经完成了我们整个的设定。不过目前的设定仅限于室内的家庭环境,但是我们想在公司时也能使用家里的APN,怎么办?最后一节是教你超额完成    

[对外开放APN]

我家的网络与各位不同,是固定IP地址,当前大多是ADSL或者PPPOE的动态IP,因此这一章的目的是让你可以透过运营商对外开放APN
我使用的是TPLink,进入设定页面,找到”转发规则“”虚拟服务器“,然后设定如下:
ID服务端口IP地址协议状态配置
122192.168.1.200TCP生效编辑 删除
23128192.168.1.200ALL生效编辑 删除
以后你就可以远程用你的公网IP+端口来进行外网访问。你想知道你的外网IP,就在家里用电脑打开 www.ip138.com  看看。

但是我们的IP都是动态的,可能今天是 1.1.1.1明天就变成 1.1.1.200了,你可以使用DDNS,这部分我今天暂时不写,因为你能做到这一步,一般都不是普通人,可以具备自我操作能力了。今天是阳历生日,我需要出去happy一下,逛街。。。。下一篇会补上。

from http://bao3.blogspot.com/2013/01/raspberry-pi-apn-cisco-ipsec-vpn.html