ipsec
早在2005年,为解决国内办公室访问香港邮件服务器时连接被随机中断而产生大量重复邮件的问题,我们在香港IDC机房的NetScreen防火墙上部署了IPsec VPN服务器,国内员工电脑上安装VPN客户端软件,在发送邮件前先VPN拨号,虽然麻烦,但成功解决了问题。
到了2007年,公司在Nasdaq上市,按照SOX法案要求,必须加强全球各办公室、机房的IT架构安全,我们将网络设备全部升级为Cisco的产品。当然,我最感兴趣的是Cisco的防火墙产品,它有一套完整的IPsec VPN解决方案。当时我们采用的是ASA5520,构建site to site VPN,将各个办公室和机房的内网打通,并统一部署微软的AD森林,IT基础服务非常稳定,各方面都很满意。而最受员工好评的就是,在办公室里上网可以无阻碍地访问国外网站,并无需事前做任何动作,只因为我们将流量做了分流,访问国内的走国内线路,访问国外的走VPN加密通道从香港出去。同样的,对于移动办公人员,给他们安装Cisco System VPN Client来拨号访问香港的VPN服务器。
期间,还有在美国的朋友要看中国网上直播的奥运节目,在香港的朋友要看内地网上点播的连续剧,而有些节目不对境外IP开放。办法当然是在国内架设远程访问VPN服务器。
这就是一个标准的围城格局。
皆大欢喜的背后是高昂的成本,众所周知,思科产品相当的贵。
那有没有廉价的解决方案呢?当然有,还有不少呢,这得感谢软件开源项目,技术先进,功能强大,还不用花钱。
今年春节前,公司为接收美国节点的数据做大数据分析,购置了IBM旗下Softlayer香港节点的云服务器,这给我测试Linux下的开源VPN软件提供了合适的资源条件,于是我开始寻找合适的开源VPN软件。
先看看常用VPN协议有哪些?
参考:维基百科 - 虚拟专用网
常用的虚拟专用网协议有:
- L2F
- L2TP
- PPTP
- IPsec (如Cisco IPSec VPN)
- SSL VPN
- AnyConnect(Cisco SSL VPN)
- OpenVPN
- SoftEther
各协议的优缺点就不说了,有兴趣可以自己去查,这里我只关注IPsec。
基于IPsec的VPN通道其实包含以下两个部分:
- IKE协议(互联网密钥交换协议): 两个系统端使用IKE协议来互相验证,并协商建立IPsec通道所需的特定加密参数和两端特定的网段。
- IPsec协议(IP安全协议):使用特定加密参数对特定数据进行加密传输,通常由操作系统内核实现,目前基本上所有主流操作系统都支持IPsec协议。
用白话说就是,IKE负责连接双方的身份验证,双方协商得出的密码和使用的加密算法都告知给操作系统,操作系统对两边网段之间的流量数据进行加密传输。
既然数据加密传输的活都给操作系统来干了,操作系统我们也没什么好选的,能选的就只有实现IKE协议的软件了。
IKE的版本发展:
1988年11月,互联网工程任务组在一系列的RFC文件中,定义了这个协议,其中包括了 RFC 2407,RFC 2408 以及 RFC 2409。
2005年以后,IKE版本升级到了IKEv2版本,RFC文件有所更新,其中包括 RFC 4306, RFC 4718,RFC 5996 以及 RFC 7296。
IKEv2的主要改进:
- 更精简的RFC标准化文档
- 对移动设备更好的支持
- 全面支持NAT穿越和SCTP协议
- 简化的信息交换机制
- 增强的可靠性和状态管理
- 更好的防范DoS攻击机制
参考 - 维基百科 - IKEv2的实现
如下为当前可用的IKEv2开源实现:
- OpenIKEv2,
- strongSwan,
- Openswan,
- IKEv2,
- Racoon and Racoon2 from the KAME project,
- iked from the OpenBSD project.,
- Libreswan,
- Rockhopper VPN Software
名单的有些软件已经很久不更新了。
而稍微留心一下这个名单,会发现有个字眼很显眼,很明显就是天鹅swan家族:strongSwan, Openswan, Libreswan。
它们其实有一个共同的鼻祖:FreeS/WAN开源项目,历史还真是悠久,为了厘清脉络,我特别做了一些翻译和编辑工作。
参考 - Libreswan官网 - 历史
FreeS/WAN时代(1996 - 2004)
1996年John Gilmore和Hugh Daniel创建FreeS/WAN开源项目,致力于开发用于互联网加密的IPsec和DNS标准,愿景是以每年5%的速度推进流量加密,直到整个互联网全部使用加密通讯。FreeS/WAN项目通常有5个付费人员来开发代码,所有费用由Gilmore支付。
那个时候,加密并不普遍,用于实施加密的免费软件也非常少见。OpenSSL的前身SSLeay也刚刚被开发出来用于web服务器和客户端之间的加密通讯。虽然美国政府与民间组织之间有关隐私的争论已经如火如荼,大多数人并没有深入思考美国政府对网络通讯的侦听和监视。Freeswan软件的目标就是在美国政府以国家安全为由出台法律禁止公众加密之前,广泛普及随机加密技术(Opportunistic Encryption,OE)使加密无处不在。为防止美国政府根据国家安全法案对freeswan的所有者提起控诉,Gilmore要求美国公民包括他本人都不得为freeswan编写代码。这个限制造成了很多不良后果,因为它阻止了freeswan代码被合并进Linux内核,因此使得部署freeswan变得更加困难。
同时,各公司对于在互联网上建立安全连接和VPN的强烈需求,极大地推动了可用的加密标准的开发,为满足不同公司的各种加密需求,各种实现方式的IPsec标准也应运而生。
现在大家所知的IPsec标准套件,是来自于国际互联网工程任务组(IETF)的标准,包含了许多标准文档来实现用于验证的互联网密钥交换(IKE)协议和用于传输加密数据的IPsec协议。大量的加密和验证算法被支持和标准化。然而,并没有采用随机加密(OE)机制。同时,因为一些技术障碍造成的部署困难,使得DNS的安全版本也一度被延迟了好多年。2010年7月15日DNS根区(root zone)最终获准使用DNSSEC,这已经是延迟十年之后的事情了。这期间,freeswan的DNSSEC并未被采用,
因为IETF声明只有DNS自己可以使用DNSSEC KEY记录(现在改名为DNSKEY记录),这意味着freeswan不得不重回过去糟糕的文本记录格式。在2005年IPsec也引入了它自己的DNS记录类型IPSECKEY,但是需要耗费很多年的努力来部署新DNS软件来实际支持这个新记录类型。另外,最终用户也不希望访问他们的反向DNS区来发布OE IPsec需要的公钥。
freeswan也始终没有被Linux内核采用过,一部分原因是Gilmore强制非美国代码的规则,更大的原因在于与负责网络和加密的Linux内核开发人员疏于协作。
尽管freeswan团队多年一直参与Linux研讨会和内核顶层决策会议,Linux开发团队依然沿着他们自己的开发路径,最终只是推出了一些并没有获得广泛支持的加密子系统。结果导致了两个团队花费多年时间来努力维护两个互相竞争的内核IPsec协议栈,KLIPS和NETKEY,直到今日也没有人将这两个协议栈的优点统一整合起来。
一般来说,公众似乎并不太关心政府的侦听,哪怕在Nikcy Hager揭示以美国为中心的情报收集分析网络梯队系统(Echelon)的时候,也没有引起公众对部署加密通讯的足够重视。从90年代到21世纪初,并没有太多的人认为不加密的互联网是个真实的问题,直到2013年6月斯诺登(Edward Snowden)在香港将美国国家安全局关于棱镜计划监听项目的秘密文档披露给英国《卫报》和美国《华盛顿邮报》的时候,这已经是Gilmore放弃用freeswan对整个互联网加密的企图整整十年之后了。
从FreeS/WAN到Openswan(2004 - 2012)
虽然很多商业公司已经在使用freeswan作为它们密钥协作性测试的工具之一,Gilmore和他的开发团队之间的矛盾却与日俱增。Andreas Steffen(strongSwan项目的维护者)编写了大量补丁使freeswan能够支持X.509数字证书标准,但Gilmore拒绝将其并入freeswan。Mathieu Lafon编写的另一个商用VPN的基本功能NAT-Traversal支持代码,也被Gilmore拒绝。freeswan的志愿者Ken Bantoft,维护了一个包含上述补丁的freeswan的版本,并将之命名为超级freeswan。然而,Gilmore看到这个名字并不高兴,因为他不想那些杂七杂八的互联网技术和freeswan这个名字有任何瓜葛。
2003年7月,Gilmore和另一位积极的freeswan志愿者Paul Wouters在柏林附近召开的Chaos Communication Camp会议上碰面。他们想出了一个办法,在没有Gilmore提供赞助的条件下使用freeswan继续对IPsec进行开发。Wouters和其他志愿者将freeswan代码复制出一个分支,同时Gilmore将商业VPN开发相关的大块代码剔除后构建新的freeswan发布版本。Wouters的这个软件分支,被起名为openswan,源于freebsd/openbsd的命名历史,这个名字就这么叫开了。
Gilmore在发布了2个移除了VPN代码的freeswan版本后,就在2004年3月1日,著名的开源网络安全项目 FreeS/WAN 宣布停止开发,其原因主要是开发者的意图和用户的需求不吻合。对于网络安全系统,用户更多考虑的是系统功能的完整、强大,而不是它可预知的先进性,因此,FreeS/WAN 新版本中主打推出的 Opportunistic Encryption (OE) - 随机加密没有吸引到足够数量的用户测试。鉴于此,投资者停止了对 FreeS/WAN 项目的资助,FreeS/WAN从此淡出江湖。
总的来说,Openswan项目将注意力从随机加密(OE)技术转向VPN技术。4个Openswan志愿者创立了Xelerance公司来提供对Openswan的商业支持,盈利被用来对Openswan继续开发。由于不再有Gilmore强加于freeswan的限制这样的障碍,脱胎于freeswan的Openswan代码,被广泛采用并被整合进主要的Linux发行版中,例如RHEL,Debian和SuSe Linux。很多企业级特性被加入,像Xauth和SAref,在企业环境中Openswan如鱼得水。但这种状况本身造成了Xelerance公司收入锐减,因为企业用户大多使用RHEL,很自然付费给Red Hat来提供商业支持,而IPsec和IKE运行得足够好以致于用户基本上没有对新特性的开发要求,或者他们宁愿等待别人来付费或开发新功能。因此,虽然Xelerance公司此时仍然对Openswan项目提供赞助,但公司的运营方向已经发生了改变。一个又一个原始创始者离开了公司,Wouters是在2011年12月最后一个离开的,他的离开引发了Openswan项目团队和Xelerance公司之间关于Openswan商标所有权的争执,引发了法律诉讼。而当免费软件开发者被公司提起诉讼时,比较经济和简单的办法就是走人并给软件改名,Libreswan就这样诞生了。
参考 - strongSwan官方文档 - The strongSwan Open Source VPN Solution
可以看到strongSwan其实是和Openswan并列的两个开源项目,strongSwan更早就对IKEv2提供了完整支持,就选它了。
安装strongSwan
先升级操作系统CentOS至最新版本,我这里比较喜欢用CentOS 6.x的版本。
- yum -y update
升级完后需要reboot重启服务器。
查看CentOS版本号
- uname -a
- Linux slhk 2.6.32-573.18.1.el6.x86_64 #1 SMP Tue Feb 9 22:46:17 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
查看SELinux状态
- [root@slhk ~]# sestatus
- SELinux status: disabled
如果SELinux没有被禁用,需禁用之,并重启服务器
查看当前网卡配置
- [root@slhk ~]# ifconfig
- eth0 Link encap:Ethernet HWaddr 06:3C:1D:E3:9C:46
- inet addr:10.110.71.123 Bcast:10.110.71.127 Mask:255.255.255.192
- inet6 addr: fe80::43c:1dff:fee3:9c46/64 Scope:Link
- UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
- RX packets:88318851 errors:0 dropped:0 overruns:0 frame:0
- TX packets:25328422 errors:0 dropped:0 overruns:0 carrier:0
- collisions:0 txqueuelen:1000
- RX bytes:110102171108 (102.5 GiB) TX bytes:2571529525 (2.3 GiB)
- Interrupt:246
- eth1 Link encap:Ethernet HWaddr 06:F8:19:A1:0C:27
- inet addr:119.81.236.70 Bcast:119.81.236.71 Mask:255.255.255.248
- inet6 addr: fe80::4f8:19ff:fea1:c27/64 Scope:Link
- UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
- RX packets:15095342 errors:0 dropped:0 overruns:0 frame:0
- TX packets:17748377 errors:0 dropped:0 overruns:0 carrier:0
- collisions:0 txqueuelen:1000
- RX bytes:1133594452 (1.0 GiB) TX bytes:42002925032 (39.1 GiB)
- Interrupt:245
- lo Link encap:Local Loopback
- inet addr:127.0.0.1 Mask:255.0.0.0
- inet6 addr: ::1/128 Scope:Host
- UP LOOPBACK RUNNING MTU:65536 Metric:1
- RX packets:217503 errors:0 dropped:0 overruns:0 frame:0
- TX packets:217503 errors:0 dropped:0 overruns:0 carrier:0
- collisions:0 txqueuelen:0
- RX bytes:29181128 (27.8 MiB) TX bytes:29181128 (27.8 MiB)
可以看到,服务器公网IP是119.81.236.70,对应网卡是eth1。
安装strongSwan的运行依赖环境
- yum -y install gpm-devel pam-devel openssl-devel make gcc
现在正式开始安装strongSwan
安装方法一:使用yum安装
strongSwan的发行版已包含在EPEL源中, 但源中的包版本5.3.2比较低,目前官网上5.4.0已经发布了。
- 安装EPEL源:
- yum -y install epel-release
- 安装strongswan:
- yum -y install strongswan
- alias ipsec='strongswan'
安装方法二:下载源程序编译安装
为使用最新版本,还是得自己下载源码编译安装,我测试时的版本是5.3.5。
- 下载源代码压缩包
- cd /root
- wget http://download.strongswan.org/strongswan.tar.gz
- 解压
- tar zxvf strongswan.tar.gz
- 编译安装
程序安装路径:/usr
strongSwan配置文件路径:/etc/strongswan
- cd strongswan-5.3.5
- ./configure --prefix=/usr --sysconfdir=/etc/strongswan --enable-eap-identity --enable-eap-md5 \
- --enable-eap-mschapv2 --enable-eap-tls --enable-eap-ttls --enable-eap-peap \
- --enable-eap-tnc --enable-eap-dynamic --enable-eap-radius --enable-xauth-eap \
- --enable-xauth-pam --enable-dhcp --enable-openssl --enable-addrblock \
- --enable-unity --enable-certexpire --enable-radattr --enable-tools \
- --enable-openssl --disable-gmp
- make
- make install
配置私钥和证书
- 生成CA私钥,并使用此私钥自签名生成CA证书
- cd /etc/strongswan
- ipsec pki --gen --outform pem > ca.pem
- ipsec pki --self --in ca.pem --dn "C=CN, O=VPN, CN=strongSwan CA" --ca --lifetime 3652 \
- --outform pem > ca.cert.pem
这里C表示国家名,O表示组织名,CN为通用名。默认证书有效期为3年,这里配置3652天,即10年。 - 生成服务器私钥,然后从私钥中导出公钥,用CA证书签发服务器证书
ipsec pki命令可用来生成RSA密钥对,包含了私钥和公钥,公钥是在网络上传输的,而私钥是藏好用来和接收到的公钥配对的(因此私钥里也有整个公钥,用来配对)。
- ipsec pki --gen --outform pem > server.pem
- ipsec pki --pub --in server.pem | ipsec pki --issue --lifetime 3652 --cacert ca.cert.pem \
- --cakey ca.pem --dn "C=CN, O=VPN, CN=119.81.236.70" --san="119.81.236.70" \
- --flag serverAuth --flag ikeIntermediate --outform pem > server.cert.pem
- iOS 客户端要求 CN 也就是通用名必须是你的服务器的 URL 或 IP 地址。
- 除了上述要求,Windows 7 还要求必须显式说明这个服务器证书的用途(用于与服务器进行认证)--flag serverAuth。
- 非 iOS 的 Mac OS X 要求了“IP 安全网络密钥互换居间(IP Security IKE Intermediate)”这种增强型密钥用法(EKU)--flag ikdeIntermediate。
- Android 和 iOS 都要求服务器别名(serverAltName)就是服务器的 URL 或 IP 地址,--san。
所以这里C、O的值要跟第1步的一致,CN值及--san值是服务器公网地址或url,另外这里可以设置多个--san值。否则会出现错误 13801:IKE身份验证凭证不可接受。 - 生成客户端私钥,然后从私钥中导出公钥,用CA证书签发客户端证书
- ipsec pki --gen --outform pem > client.pem
- ipsec pki --pub --in client.pem | ipsec pki --issue --lifetime 3652 --cacert ca.cert.pem \
- --cakey ca.pem --dn "C=CN, O=VPN, CN=strongSwan Client" --outform pem > client.cert.pem
这里C、O的值要跟第1步的一致。 - 生成 pkcs12 证书,用来导入手机或电脑
- openssl pkcs12 -export -inkey client.pem -in client.cert.pem -name "strongSwan Client" \
- -certfile ca.cert.pem -caname "strongSwan CA" -out client.cert.p12
- Export Password: pceva.com
生成时需设置密码,例如:pceva.com,请记住这个密码,在客户端导入此证书时需输入该密码。
安装证书
把刚才生成的私钥和证书文件复制到目录/etc/strongswan/ipsec.d/下的指定目录下即可。
- cp -r ca.cert.pem /etc/strongswan/ipsec.d/cacerts/
- cp -r server.cert.pem /etc/strongswan/ipsec.d/certs/
- cp -r server.pem /etc/strongswan/ipsec.d/private/
- cp -r client.cert.pem /etc/strongswan/ipsec.d/certs/
- cp -r client.pem /etc/strongswan/ipsec.d/private/
cacerts/目录下放置CA证书
certs/目录下放置服务器和客户端证书
private/目录下放置服务器和客户端私钥
配置strongSwan
strongSwan包含3个配置文件,在目录/etc/strongswan/下。
strongswan.conf strongSwan各组件的通用配置
ipsec.conf IPsec相关的配置,定义IKE版本、验证方式、加密方式、连接属性等等
ipsec.secrets 定义各类密钥,例如:私钥、预共享密钥、用户账户和密码
vi /etc/strongswan/strongswan.conf
- # strongswan.conf - strongSwan configuration file
- #
- # Refer to the strongswan.conf(5) manpage for details
- #
- # Configuration changes should be made in the included files
- charon {
- load_modular = yes
- duplicheck.enable = no #冗余检查关闭,以允许同时连接多个设备
- compress = yes #传输启用压缩
- plugins {
- include strongswan.d/charon/*.conf
- }
- dns1 = 8.8.8.8 #给远程端指定DNS服务器
- dns2 = 8.8.4.4
- nbns1 = 8.8.8.8 #指定Windows的WINS服务器
- nbns2 = 8.8.4.4
- filelog { #配置strongSwan日志级别和路径
- /var/log/strongswan.log {
- time_format = %b %e %T
- default = 2
- append = no
- flush_line = yes
- }
- }
- }
- include strongswan.d/*.conf
vi /etc/strongswan/ipsec.conf
- # ipsec.conf - strongSwan IPsec configuration file
- config setup
- uniqueids=never #关闭ID唯一性,即允许多个客户端使用同一个证书,多设备同时在线
- conn %default #默认配置项,其他conn配置项都会调用此默认项
- left=%any #left表示local,即本地端(服务器端)IP地址;%any是魔数字,表示任意地址
- leftsubnet=0.0.0.0/0 #本地端网络,0.0.0.0/0为通配,表示所有IP网段
- right=%any #right表示remote,即远程端(客户端)IP地址可为任意地址
- rightsourceip=10.11.12.0/24 #分配给远程端的虚拟IP地址段,尽量避免使用常用私网地址段以免冲突
- dpdaction=clear #dpd表示Dead Peer Detection,对端失效检测,clear表示对端失效时关闭连接
- conn IKEv1-CERT-XAUTH #供老版本IOS使用。IKEv1,使用证书和XAUTH验证
- keyexchange=ikev1 #密钥交换使用IKEv1
- fragmentation=yes #允许分片
- leftauth=pubkey #本地端使用公钥验证
- leftcert=server.cert.pem #指定本地端证书
- rightauth=pubkey #远程端使用公钥验证
- rightauth2=xauth #远程端使用用户账号验证
- rightcert=client.cert.pem #指定远程端证书
- auto=add #auto定义strongSwan服务启动时该连接的行为,add是添加连接类型但不启动
- conn IKEv1-PSK-XAUTH #供IOS, Android使用。IKEv1,使用预共享密钥和XAUTH验证
- keyexchange=ikev1 #密钥交换使用IKEv1
- leftauth=psk #本地端使用预共享密钥验证
- rightauth=psk #远程端使用预共享密钥验证
- rightauth2=xauth #远程端使用用户账号验证
- auto=add #strongSwan启动时添加连接类型但不启动
- conn IKEv2-CERT #供Windows 7+, Linux使用。IKEv2,使用证书验证
- keyexchange=ikev2 #密钥交换使用IKEv2
- leftauth=pubkey #本地端使用公钥验证
- leftcert=server.cert.pem #指定本地端证书
- rightauth=pubkey #远程端使用公钥验证
- rightcert=client.cert.pem #指定远程端证书
- auto=add #strongSwan启动时添加连接类型但不启动
- conn IKEv2-EAP #供Windows 7+, IOS9+使用。IKEv2,EAP验证
- keyexchange=ikev2 #密钥交换使用IKEv2
- ike=aes256-sha256-modp1024,3des-sha1-modp1024,aes256-sha1-modp1024! #第一阶段加密方式
- esp=aes256-sha256,3des-sha1,aes256-sha1! #ESP的顺序与IKE一致
- rekey=no #本地端对Windows远程端发出rekey请求会断开连接,所以需配置为no
- leftauth=pubkey #本地端使用公钥验证
- leftcert=server.cert.pem #指定本地端证书
- leftsendcert=always #本地端总是发送证书
- leftid=119.81.236.70 #本地端标识,使用本地端公网IP地址作为标识,和生成服务器证书时的--san参数对应
- rightauth=eap-mschapv2 #远程端使用eap-mschapv2验证
- rightsendcert=never #不要求远程端发送证书
- eap_identity=%any #指定EAP验证身份,任意账户
- fragmentation=yes #允许分片
- auto=add #strongSwan启动时添加连接类型但不启动
密码文件ipsec.secrets文件默认不存在,需要自己生成。
vi /etc/strongswan/ipsec.secrets
- : RSA server.pem #指定服务器的RSA私钥文件
- : PSK "hello2016.pceva.com" #配置预共享密钥为:hello2016.pceva.com
- stone : XAUTH "PCeva2016" #配置XAUTH验证的用户名stone和密码PCeva2016,可配置多个用户账户
- stone : EAP "PCeva2016" #配置EAP验证的用户名stone和密码PCeva2016,可配置多个用户账户
更改密码文件读写权限,仅限root可读写
- chmod 600 ipsec.secrets
CentOS配置转发
- sed -i 's/net.ipv4.ip_forward = 0/net.ipv4.ip_forward = 1/g' /etc/sysctl.conf
- sysctl -p
CentOS配置iptables防火墙,允许UDP500,UDP4500,并配置转发和NAT规则。
vi /etc/sysconfig/iptables
- # Generated by iptables-save v1.4.7 on Thu Mar 31 17:56:08 2016
- *filter
- :INPUT DROP [0:0]
- :FORWARD DROP [0:0]
- :OUTPUT ACCEPT [17175:5181315]
- -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
- -A INPUT -p icmp -j ACCEPT
- -A INPUT -i lo -j ACCEPT
- -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
- -A INPUT -i eth1 -p udp -m udp --dport 500 -j ACCEPT
- -A INPUT -i eth1 -p udp -m udp --dport 4500 -j ACCEPT
- -A INPUT -j REJECT --reject-with icmp-host-prohibited
- -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
- -A FORWARD -s 10.10.10.0/24 -j ACCEPT
- -A FORWARD -j REJECT --reject-with icmp-host-prohibited
- COMMIT
- # Completed on Thu Mar 31 17:56:08 2016
- # Generated by iptables-save v1.4.7 on Thu Mar 31 17:56:08 2016
- *nat
- :PREROUTING ACCEPT [69:5938]
- :POSTROUTING ACCEPT [13:839]
- :OUTPUT ACCEPT [13:839]
- -A POSTROUTING -s 10.10.10.0/24 -o eth1 -j MASQUERADE
- COMMIT
- # Completed on Thu Mar 31 17:56:08 2016
配置完成后,重启iptables服务,使新规则生效。
- service iptables restart
配置init.d服务启动脚本(源码编译安装不带此脚本)
vi /etc/init.d/strongswan
- #!/bin/sh
- #
- # strongswan An implementation of key management system for IPsec
- #
- # chkconfig: - 48 52
- # description: Starts or stops the Strongswan daemon.
- ### BEGIN INIT INFO
- # Provides: ipsec
- # Required-Start: $network $remote_fs $syslog $named
- # Required-Stop: $syslog $remote_fs
- # Default-Start:
- # Default-Stop: 0 1 6
- # Short-Description: Start Strongswan daemons at boot time
- ### END INIT INFO
- # Source function library.
- . /etc/rc.d/init.d/functions
- exec="/usr/sbin/ipsec"
- prog="strongswan"
- status_prog="starter"
- config="/etc/strongswan/strongswan.conf"
- lockfile=/var/lock/subsys/$prog
- start() {
- [ -x $exec ] || exit 5
- [ -f $config ] || exit 6
- echo -n $"Starting $prog: "
- daemon $exec start
- retval=$?
- echo
- [ $retval -eq 0 ] && touch $lockfile
- return $retval
- }
- stop() {
- echo -n $"Stopping $prog: "
- $exec stop
- retval=$?
- echo
- [ $retval -eq 0 ] && rm -f $lockfile
- return $retval
- }
- restart() {
- stop
- start
- }
- reload() {
- restart
- }
- force_reload() {
- restart
- }
- _status() {
- # run checks to determine if the service is running or use generic status
- status $status_prog
- }
- _status_q() {
- _status >/dev/null 2>&1
- }
- case "$1" in
- start)
- _status_q && exit 0
- $1
- ;;
- stop)
- _status_q || exit 0
- $1
- ;;
- restart)
- $1
- ;;
- reload)
- _status_q || exit 7
- $1
- ;;
- force-reload)
- force_reload
- ;;
- status)
- _status
- ;;
- condrestart|try-restart)
- _status_q || exit 0
- restart
- ;;
- *)
- echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload}"
- exit 2
- esac
- exit $?
配置开机时strongswan服务自启动
- cd /etc/init.d
- chmod +x strongswan
- chkconfig --add strongswan
- chkconfig strongswan on
启动strongswan服务
- service strongswan start #或者 ipsec start
查看strongswan服务状态
- service strongswan status #或者 ipsec status
注:以上防火墙配置只是添加了nat转发功能,ip映射在web页面操作完成的
服务器防火墙配置如下
*nat
:PREROUTING ACCEPT [69:5938]
:POSTROUTING ACCEPT [13:839]
:OUTPUT ACCEPT [13:839]
-A POSTROUTING -s 10.11.12.0/24 -o eth0 -j MASQUERADE
COMMIT
注:服务器的dns地址为内网dns
本机电脑vpn配置dns也为内网dns
----------------------------------------------------------------------
电脑vpn配置
在 Mac 上输入 VPN 服务器信息
- 点击网络设置页面左下角的 + 添加按钮。
- 在 接口 栏位选择 VPN 。
- 在 VPN 类型 栏位选择 Cisco IPSec。
- 输入 VPN 连接的服务名称。
- 点击 创建。
步骤三: 创建 VPN 连接。
- 进入网页图形界面(Web GUI)的 虚拟专用网(VPN)服务器 页面。
- 在网络设置画面的 服务器地址 栏位,输入 虚拟专用网(VPN)服务器 页面 服务器 IP 地址 栏位显示的 IP 地址。
- 进入网页图形界面(Web GUI)的 虚拟专用网(VPN)服务器 页面,在 帐号 栏位输入访问 VPN 服务器的用户名称。然后在 Mac 网络设置画面中输入同样的帐户名称。
- 进入网页图形界面(Web GUI)的 虚拟专用网(VPN)服务器 页面,在 密码 栏位输入访问 VPN 服务器的用户名称。然后在 Mac 网络设置画面中输入同样的密码。
- 完成后,在 虚拟专用网(VPN)服务器 页面点击 + 图标。
步骤四: 连接至 VPN
- 在 Mac 网络设置画面,点击 认证设置。
- 在 虚拟专用网(VPN)服务器 页面输入Pre Shared Key,然后在 机器鉴定 窗口的 共享的密钥 栏位输入同样的密钥
- 完成后,在 机器鉴定 窗口中点击 好。
- 在 虚拟专用网(VPN)服务器 页面点击 应用本页面设置。
- 在 Mac 网络设置画面中点击 连接。
以上为VPN服务器端的配置