在Ubuntu下搭建VPN服务器,我们分别搭建PPTP和L2TP两种类型。
首先我们搭建PPTP服务器。
下载安装pptpd:
1 2 |
sudo apt-get update sudo apt-get install pptpd |
接下来修改配置脚本,首先在/etc/ppp/options中配置DNS。
将以下两行的注释符号删除并改为你需要的外网DNS:
1 2 |
ms-dns 8.8.8.8 ms-dns 8.8.4.4 |
然后修改pptp配置文件/etc/ppp/pptpd-options,除注释行外的内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
name pptpd refuse-pap refuse-chap refuse-mschap require-mschap-v2 require-mppe-128 proxyarp nodefaultroute lock nobsdcomp novj novjccomp nologfd |
以及另一个用于pptp分配ip的配置文件/etc/pptpd.conf,在该文件结尾加入:
1 2 |
localip 192.168.8.1 remoteip 192.168.8.2-180 |
给pptp连接分配的内部ip地址段请根据需要填写。
接下来打开路由转发功能,在/etc/sysctl.conf中找到以下内容将数值改为1:
net.ipv4.ip_forward=1
保存后运行命令生效:
sysctl -p
修改iptable规则NAT转发以及设置MTU
1 2 |
iptables -t nat -A POSTROUTING -s 192.168.8.0/24 -o eth0 -j MASQUERADE iptables -I FORWARD -s 192.168.8.0/24 -p tcp --syn -i ppp+ -j TCPMSS --set-mss 1356 |
以上两行重启后会失效,很多人的做法是将其保存为iptable rules添加到pre-up中
我的做法比较简单,直接将这两行写入/etc/rc.local结尾(exit之前)。
(注意:eth0是你的公网网卡名称,请通过ifconfig确认)
然后在/etc/ppp/chap-secrets中添加用户和密码。
格式为[用户名\t连接类型\t密码\t用户IP],例如:
1 |
test * test * |
使用/etc/init.d/pptpd restart重启pptpd服务。
至此pptp类型VPN搭建完毕。
接下来搭建L2TP类型VPN。
因为L2TP需要通过IPSec加密,同样我们下载安装需要的组建服务:
1 2 3 |
sudo apt-get update sudo apt-get install openswan sudo apt-get install xl2tpd |
然后修改配置文件/etc/ipsec.conf,除注释行外的内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
version 2.0 config setup dumpdir=/var/run/pluto/ nat_traversal=yes virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12,%v4:25.0.0.0/8,%v6:fd00::/8,%v6:fe80::/10 oe=off protostack=netkey conn L2TP-PSK-NAT rightsubnet=vhost:%priv also=L2TP-PSK-noNAT conn L2TP-PSK-noNAT authby=secret pfs=no auto=add keyingtries=3 rekey=no ikelifetime=8h keylife=1h type=transport left=88.88.88.88 leftprotoport=17/1701 right=%any rightprotoport=17/%any dpddelay=10 dpdtimeout=90 dpdaction=clear |
left处请填写您本服务器的IP位址!
接下来修改/etc/xl2tpd/xl2tpd.conf,除注释行外的内容如下:
1 2 3 4 5 6 7 8 9 10 11 |
[global] ipsec saref = yes [lns default] ip range = 192.168.8.181-192.168.8.254 local ip = 192.168.8.1 length bit = yes require chap = yes refuse pap = yes require authentication = yes ppp debug = yes pppoptfile = /etc/ppp/options.xl2tpd |
ip range处请填写您需要给l2tp连接分配的内部ip网段。
再修改/etc/ppp/options.xl2tpd,如果没有可以新建,内容如下:
1 2 3 4 5 6 7 8 9 10 |
require-mschap-v2 ms-dns 8.8.8.8 ms-dns 8.8.4.4 auth crtscts hide-password name l2tpd proxyarp lcp-echo-interval 30 lcp-echo-failure 4 |
DNS处可设置您需要分配的DNS地址。
再修改/etc/ipsec.secrets文件设置默认共享密钥:
1 |
88.88.88.88 %any: PSK "kujourin" |
前面为本服务器IP地址,引号内的为您要设置的密钥
修改网络策略使ipsec能正常运行:
1 2 3 4 5 |
for each in /proc/sys/net/ipv4/conf/* do echo 0 > $each/accept_redirects echo 0 > $each/send_redirects done |
顺便也加入到/etc/rc.local中(exit之前)。
以上配置全部完毕后,可以通过ipsec verify命令检测ipsec运行是否正常。
如果出现Checking for IPsec support in kernel [FAILED],您可能未启动ipsec服务,通过/etc/init.d/ipsec start启动。
如果出现NETKEY: Testing XFRM related proc values [FAILED],您可能未修改网络策略。
如果出现Pluto listening for IKE on udp 500 [FAILED],您可能需要安装apt-get install lsof。
如果没有出现[FAILED]表示运行正常。
Ubuntu使用apt-get安装openswan一定会出现Two or more interfaces found, checking IP forwarding [FAILED]。
而且客户端无法连接,且在/var/log/auth日志中出现
ERROR: netlink XFRM_MSG_DELPOLICY response for flow eroute_connection delete included errno 2: No such file or directory
那么原因应该是apt-get到的openswan版本并不能在该Ubuntu上运行,建议去openswan的官网下载2.6.34版本手动编译安装。
或在此下载源码:ftp://ro:[email protected]/openswan_lilith.pro.tar.gz
(这实在非常恶心,因为源码编译安装不是谁都能完成的,注意必须把源码解压在/usr/src下并apt-get install libgmp3-dev,以及bison,flex等然后再编译安装)
L2TP将和PPTP一样使用/etc/ppp/chap-secrets作为帐户密码文件。
重启所有服务:
1 2 3 |
/etc/init.d/pptpd restart /etc/init.d/xl2tpd restart /etc/init.d/ipsec restart |
大功告成!
======
kujou_rin