一、IPSec
注意:以下教程中sudo在有些版本系统中会提示“未知sudo命令”,在输入时去掉sudo即可。
1.安装IPSec/L2TP软件
#sudoapt-getinstallxl2tpdopenswanppplsof
如果出现Do you want to create a RSA public/private keypair for this host?。我们选择No,这种模式的IPSec通过证书进行验证,而非PSK。
#ipsec--version//查看ipsec版本
报错:
E: Package 'openswan' has no installation candidate
意思是在当前的apt-get“源”中没有找到"openswan"这个软件。很正常,除了Ubuntu官方以外,其他第三方提供的源不可能那么完整,所以找别的源增加就行了。
#sudovi/etc/apt/sources.list.d/lzu.list
写入以下内容:
debhttp://mirror.lzu.edu.cn/ubuntu/precisemainrestricteduniversemultiverse debhttp://mirror.lzu.edu.cn/ubuntu/precise-securitymainrestricteduniversemultiverse debhttp://mirror.lzu.edu.cn/ubuntu/precise-updatesmainrestricteduniversemultiverse debhttp://mirror.lzu.edu.cn/ubuntu/precise-proposedmainrestricteduniversemultiverse debhttp://mirror.lzu.edu.cn/ubuntu/precise-backportsmainrestricteduniversemultiverse deb-srchttp://mirror.lzu.edu.cn/ubuntu/precisemainrestricteduniversemultiverse deb-srchttp://mirror.lzu.edu.cn/ubuntu/precise-securitymainrestricteduniversemultiverse deb-srchttp://mirror.lzu.edu.cn/ubuntu/precise-updatesmainrestricteduniversemultiverse deb-srchttp://mirror.lzu.edu.cn/ubuntu/precise-proposedmainrestricteduniversemultiverse deb-srchttp://mirror.lzu.edu.cn/ubuntu/precise-backportsmainrestricteduniversemultiverse
生效lzu.list文件
sudoapt-getupdate
重新运行命令继续安装,输入Y后下面命令装完。
#sudoapt-getinstallxl2tpdopenswanppp
configsetup nat_traversal=yes virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12,%v4:!10.152.2.0/24 #这里包含的网络地址允许配置为远程客户端所在的子网。换句话说, #这些地址范围应该是你的NAT路由器后面的客户端的地址。 oe=off protostack=netkey connL2TP-PSK-NAT rightsubnet=vhost:%priv also=L2TP-PSK-noNAT connL2TP-PSK-noNAT authby=secret pfs=no auto=add keyingtries=3 rekey=no #Apple的iOS不会发送delete提醒, #所以我们需要通过死亡对端(deadpeer)检测来识别断掉的客户端 dpddelay=30 dpdtimeout=120 dpdaction=clear #设置ikelifetime和keylife和Windows的默认设置一致 ikelifetime=8h keylife=1h type=transport #替换IP地址为你的公网IP left=x.x.x.x #用于升级过的Windows2000/XP客户端 leftprotoport=17/1701 #要支持老的客户端,需要设置leftprotoport=17/%any right=%any rightprotoport=17/%any #强制所有连接都NAT,因为iOS forceencaps=yes
注意你的ipsec.conf文件,"config setup" 和 "L2TP-PSK-NAT"、 "L2TP-PSK-NAT"应该顶着行头写,而其它行应该以8个空格缩进。
#vi/etc/ipsec.secrets
这里x.x.x.x 替换为你的服务器的IP地址,并设置一个复杂的密码。
x.x.x.x%any:PSK"somegoodpassword"
例:
106.186.178.35%any:PSK"password"
4.启动 IPSEC 服务:
#/etc/init.d/ipsecstart
使用如下命令确认 ipsec 是否工作正常。注:只要没有Faild就可以了
#sudoipsecverify
错误1:Checking /bin/sh is not /bin/dash [WARNING]
sudodpkg-reconfiguredash
按英文提示、选择no、就可以把dash切换成bash、再执行ipsec verify就不会出现WARNING的提示了
5.在 /etc/init.d 下创建一个名为 ipsec的文件,内容如下:
#vi/etc/init.d/ipsec.vpn
case"$1"in start) echo"StartingmyIpsecVPN" iptables-tnat-APOSTROUTING-oeth0-s10.152.2.0/24-jMASQUERADE echo1>/proc/sys/net/ipv4/ip_forward foreachin/proc/sys/net/ipv4/conf/* do echo0>$each/accept_redirects echo0>$each/send_redirects done /etc/init.d/ipsecstart /etc/init.d/xl2tpdstart ;; stop) echo"StoppingmyIpsecVPN" iptables--tablenat--flush echo0>/proc/sys/net/ipv4/ip_forward /etc/init.d/ipsecstop /etc/init.d/xl2tpdstop ;; restart) echo"RestartingmyIpsecVPN" iptables-tnat-APOSTROUTING-oeth0-s10.152.2.0/24-jMASQUERADE echo1>/proc/sys/net/ipv4/ip_forward foreachin/proc/sys/net/ipv4/conf/* do echo0>$each/accept_redirects echo0>$each/send_redirects done /etc/init.d/ipsecrestart /etc/init.d/xl2tpdrestart ;; *) echo"Usage:/etc/init.d/ipsec.vpn{start|stop|restart}" exit1 ;; esac
这会配置防火墙转发。记得修改上面文件的本地IP地址池10.152.2.0/24为你自己的。
然后给这个文件设置可执行权限:
#sudochmod755ipsec.vpn
禁止默认的 ipsec 服务脚本运行:
#sudoupdate-rc.d-fipsecremove
然后,启用我们刚才定制的这个:
#sudoupdate-rc.dipsec.vpndefaults
二、L2TP
#vi/etc/xl2tpd/xl2tpd.conf
[global] ipsecsaref=no [lnsdefault] iprange=10.152.2.2-10.152.2.254 localip=10.152.2.1 requirechap=yes refusepap=yes requireauthentication=yes pppdebug=yes pppoptfile=/etc/ppp/options.xl2tpd lengthbit=yes
配置说明如下:
iprange=可以连接VPN服务的客户端IP地址范围 localip=VPN服务器的IP,必须在客户端IP范围之外 refusepap=拒绝pap认证 pppdebug=测试时打开 选择一个复杂的挑战-响应式验证字符串。虽然没有最短长度限制,不过它应该至少有16个字符,也应该足够复杂才能保证安全。
打开文件 /etc/xl2tpd/l2tp-secrets ,填入你的密码:
#vi/etc/xl2tpd/l2tp-secrets
**exampleforchallengestring
打开文件 /etc/ppp/options,做如下配置:
#vi/etc/ppp/options
refuse-mschap-v2 refuse-mschap ms-dns8.8.8.8 ms-dns8.8.4.4 asyncmap0 auth crtscts idle1800 mtu1200 mru1200 lock hide-password local #debug namel2tpd proxyarp lcp-echo-interval30 lcp-echo-failure4
ms-dns 选项设置要给客户端分配的 DNS 服务器,当客户端连接时,就会被分配这些 DNS。如果要加入多个 DNS,就每行一个,分别写几行。
如果你要给客户端推送wins设置,可以分别设置如下选项。
mtu 和 mru 按照openswan.org的说法,减小 mru/mtu 的大小非常重要。因为 l2tp/ipsec 会封装几次,可能导致性能下降,减小这个配置的大小可以一次性传输全部的包。
proxyarp 可以将连接的客户端的IP地址和以太网地址加入的系统的ARP表中。这会影响到本地局域网内其它客户端。
name l2tpd 用在 PPP验证文件里面。
打开文件 /etc/ppp/chap-secrets ,做如下配置:
user1l2tpdchooseagoodpassword* user2*chooseagoodpassword*
每行包括如下字段:
客户端 = 用户名称
服务器 = 在上面的 /etc/ppp/options.xl2tpd 定义的名字
密码 = 用户密码,你应该设置一个足够复杂的密码
IP 地址 = * 表示用户可以从任何地址连接,否则设置用户只能从特定的地址连接
IP转发
net.ipv4.ip_forward=1
生效新的配置:
sysctl-p
启动VPN
sudo/etc/init.d/ipsec.vpnrestart sudo/etc/init.d/xl2tpdrestart
参考链接:
https://linux.cn/article-3409-1.html
http://ryotamono.com/2015/03/Install%20L2TP%20Server%20on%20Ubuntu/