跳至主要内容

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一下,逛街。。。。下一篇会补上。

[APN安全]

未完。。。。



评论

  1. 此评论已被作者删除。

    回复删除
  2. 为何需要22端口?手机连服务器3128应该够了吧?

    回复删除
    回复
    1. 有些情况下,需要远程管理才会使用22端口,比如远程迅雷离线下载电影,就是先ssh (端口22)登录Raspi,然后执行下载,晚上回家看电影

      删除
  3. vpnc的监控写成下面这样,放到crontab -e不行么

    #! /bin/bash
    pptp=`ifconfig|grep P-t-P|wc -l`
    if [ $pptp -eq 0 ];then
    echo not run
    sudo killall -9 vpnc >/dev/null
    sleep 3
    sudo vpnc
    else
    echo running
    fi

    回复删除
    回复
    1. 也可行的,我是因为懒得用cron了才修改了vpnc的代码

      删除
  4. 博主你好,Ubuntu环境下应该如何创建服务?

    回复删除
  5. ubuntu 需要安装2013-02-09-wheezy-raspbian吗?

    回复删除

发表评论

读过之后是不是文思泉涌了?快快让大家拜读一下你的高见吧~~~

此博客中的热门博文

使用StrongSwan搭建 IKEv1 IKEv2 VPN服务器

#2016-01-04 决定将本文作废,因我要另再写新版本的配置。这篇作于 2013年,而strongswan已经更新很多版本。 #本文需要有独立的VPS,如果你需要一台速度快,每月30元的左右的VPS,可以使用我的邀请注册 http://www.vultr.com/?ref=6813064 并且在注册时使用 SSDVPS 可以送 $20(或者 $10 不等)。一定要选日本线路,这个到国内延迟约40ms ~ 100ms ,一般是 80ms 左右,非常快非常稳定,一个月32元,可以和几个人合租了。 #LOG:2014-04-30 对ipsec.conf进行修改,增加了android手机的兼容,现在可以支持完整支持android 自带的VPN设置啦~~~~ #LOG:2013-0609 对ipsec.conf进行修改,加入清楚DPD代码,防止IP 地址池不正确占用 #LOG: 2013-0519 删除ipsec.conf 中多余的conn iOS一节,这本是我一年前调试用的,时间不起作用; 删除了 %default中的 rightsubnet ,如果不删除,在定义了多段IP路由的情况下会导致账号无法上网(只有一段IP没这个bug),感谢  JackWindows  ‏ @ JackWindows #LOG 2013-05-12 修正bug,原配置文件会导致一个ID不可以同时多次登陆。得蒙  @ KhaosT   指点,对  strongswan.conf 加入duplicheck.enable = no ,对 ipsec.conf 加如 uniqueids=never #完成度100% 在我们生活的周围,通常要用到很多种VPN: PPTP, L2TP/IPSec, Cisco IPSec, IKEv2, 这些不同类型的VPN覆盖了目前我们常见的所有手机或者电脑平台,比如 iOS, Blackberry OS, BB10, Android, WebOS, Windows XP, Windows Vista/7/8, Unix/Unix-like。 (*如果你正在找blackberry 翻墙方法、ios ipsec vpn、windows IKEv2 VPN、Blackberry BB10 / Z10 VPN、android VPN,建

简易 APN Proxy (APN代理)的搭建

2012年2月1日 ,新增加了一种方案,请看 《 搭建增强型代理服务器(APN Proxy) 》 2012-01-03 更新 3proxy 及 监控进程脚本,分别见 B 3) 和 曾经在twitter被封锁的时候,我在长城宽带干过一件事,那就是将twitter的请求和通讯使用SSH,让全网用户可以无阻访问,不过也因此付出了代价,略不去说了。 后来得厨神 @paveo 的创意,何不将其用在手机等移动设备上?厨神的APN现在已经很成熟并在免费有限量专供中。我今天这里写得,是如何搭建自己的APN Proxy(APN 代理),但在阅读下面内容之前,需要一个刚性要求:一台在国内的Unix-Like的主机(可以是Linux/FreeBSD/Mac Osx Server/Solaris等等)并且是公网IP地址以及在国外的VPS主机(Unix类)。这个要求可以看出成本比较高,所以我看到淘宝上已经有人开始出售APN代理了,这个可以理解。 第一部分 原理 原理图1 如上图所示,我们要实现的功能原理是,将上网请求先发送到“国内VPS”,再由“国内VPS”通过SSH隧道转送到国外,最终实现无阻上网。点击查看大图可以看出,主要配置是在“国内VPS”上,包括配置SSH -D、Squid、Privoxy或者Polipo(socks代理程序你可以选自己喜欢的)。 第二 配置 1 国外VPS 国外VPS上,你需要有一个SSH帐户,并且请注意,使用密钥方式登录你的SSH而非密码,之所以如此,是为了下一步建立长久的SSH以及断线自动重连做准备,这个很重要。关于“SSH 免密码 密钥 登录”请使用google看一下。 这里有一个小插曲,部分centos 上如果默认的话,SSH帐户会报错,大约 是adminitstatly close之类,这有可能是 openfile数目问题,可以轻松解决。我非Linux爱好者,所以是临时google,并没有记录下来,你只要记得如果遇到同样问题,5分钟之内就可以google解决。 2 国内VPS 这一节将会是我们的主战场,基本上,我将会按下面的逻辑图来进行配置,这其中会涉及很多文件的配置,需要你注意哦,最后部分我会提供部分配置文档下载,由于我使用的是FreeBSD,因此会有少量差

OCSERV 0.8.5 使用

*注1:本文不包含ocserv的编译、安装,请自行研习 *注2:本文将包含ocserv的证书认证配置,不包含pam (radius)认证 *注3:本文将包含win,mac 端的使用,移动端相对简单,不做介绍 ocserv是OpenConnect SERVer的缩写,基本上就是cisco anyyconnect的开源兼容服务器软件,好处就是这个软件使用的是SSL VPN方式,通常会用DTLS这一层,支持服务器端推送32条路由,实现国内国外按需区分路由;同时各种客户端会长连接方式,一直后台待命,省时省电。我就不废话了。 我的配置是采用了全证书的方式进行,因此不需要用户名密码,如果您要对客户端进行限制,计时方面可以采用证书有效时间;流量限制方面可以使用iptables针对IP进行限制;同时在线人数上如果是多台服务器的话,相互间无法限制(cookie/session分布于不同服务器),如果仅一台服务器话就可以在配置文件搞定。我的完全配置如下,如果你要复制配置文件可以到 这里 : #第一行用以指定认证方式,我是证书 auth = "certificate" #Added @05-10-2014 #加入这个后就可以使用occtl了 #occtl reload && occtl stop now use-occtl = true occtl-socket-file = /var/run/occtl.socket # seccomp default : true #关闭这个可以提高性能,牺牲一丁点安全,更可以避免无法启动的情况(遇到过的都知道那痛苦) use-seccomp = false # listen-host = 0.0.0.0 #最大客户端数量,根据你的服务器IP地址分配多少以及性能设置,自用的话不必很大 max-clients = 36 #这个看英文就知道意思了,你可以加以限制 max-same-clients = 4 tcp-port = 443 udp-port = 443 keepalive = 32400 dpd = 60 mobile-dpd = 1800 #故意为空 mobile-idle-timeout = deny-roaming = false