一、ipsec
1、源码下载 openswan 使服务器支持ipsec
https://download.openswan.org/openswan/
2、安装 openswan-2.6.50.tar.gz
a、tar -vxf openswan-2.6.50.tar.gz
b、从文件中openswan-2.6.50 README的
1. The GNU Math Precision Library:
Debian package names: libgmp3, libgmp3-dev
Rpm package names: gmp, gmp-devel
知道要安装几个库,这里只安装了一个libgmp3-dev
c、apt-get install libgmp3-dev
3、编译
make programs install
4、配置文件
a、备份
mv /etc/ipsec.conf /etc/ipsec.conf.back
修改
vi /etc/ipsec.conf
nat_traversal=yes
virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12
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=xxx.xxx.xxx.xxx
leftprotoport=17/1701
right=%any
rightprotoport=17/%any
上面有一行是left=xxx.xx.xx.xx,这里要把left的值改为你的服务器的ip地址,外网可以访问的IP地址。
b、添加文件/etc/ipsec.secrets
xxx.xxx.xxx.xxx %any: PSK "YourPsk"
上面的xxx.xxx.xxx.xxx是服务器的公网IP,而后面的"YourPsk"中的YourPsk就是密钥。L2TP比PPTP多了一个密钥项,这也是它比PPTP更安全的原因之一。这个密钥其实就是一个密码,不同于用户的登录密码,它相当于一个设备之间通信的密钥
你可以改为自己的任意字符串。客户端登录VPN的时候,需要这个PSK。
c、vi /etc/sysctl.conf 添加
net.ipv4.ip_forward = 1
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.all.log_martians = 0
net.ipv4.conf.default.log_martians = 0
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.icmp_ignore_bogus_error_responses = 1
执行生效
sysctl -p
5、启动
ipsec setup restart
ipsec verify
root@ubuntu16:/etc# ipsec verify
Checking if IPsec got installed and started correctly:
Version check and ipsec on-path [OK]
Openswan U2.6.50/K4.4.0-127-generic (netkey)
See `ipsec --copyright' for copyright information.
Checking for IPsec support in kernel [OK]
NETKEY: Testing XFRM related proc values
ICMP default/send_redirects [OK]
ICMP default/accept_redirects [OK]
XFRM larval drop [OK]
Hardware random device check [N/A]
Checking rp_filter [ENABLED]
/proc/sys/net/ipv4/conf/all/rp_filter [ENABLED]
/proc/sys/net/ipv4/conf/ens33/rp_filter [ENABLED]
Checking that pluto is running [OK]
Pluto listening for IKE on udp 500 [OK]
Pluto listening for IKE on tcp 500 [NOT IMPLEMENTED]
Pluto listening for IKE/NAT-T on udp 4500 [OK]
Pluto listening for IKE/NAT-T on tcp 4500 [NOT IMPLEMENTED]
Pluto listening for IKE on tcp 10000 (cisco) [NOT IMPLEMENTED]
Checking NAT and MASQUERADEing [TEST INCOMPLETE]
Checking 'ip' command [OK]
Checking 'iptables' command [OK]
ipsec verify: encountered errors
这个时候,你可能就已经可以看到正常的信息了
二、ppp
一般服务器安装了,没有执行下面安装命令
apt-get install pptpd
修改
vi /etc/ppp/chap-secrets
# Secrets for authentication using CHAP
# client server secret IP addresses
2018 * 123 *
2017 * 456 *
2018 、2017 是客户端填写的登录名,123 、456是客户端填写的登录密码。每个空格都要用Tab键隔开。
三、xd
1、安装
就像pptp和pptpd一样,L2TP也依赖于xd。
apt-get install xd
如果更新不了,下载源码(xd-1.3.10.tar.gz)自己安装。
https://www.xelerance.com/archives/147
编译出错,需要安装下面的库。
apt-get install libpcap0.8-dev libpcap0.8 libcap-dev
make install 要修改makefile 文件的安装路径 xd /etc/init.d/ ,还有其他的一些文件,这边我没有试过,直接是
apt-get install xd ,这个安装完xd 是在 /etc/init.d/ 目录里。
2、修改配置
a、vi /etc/xd/xd.conf
[global]
ipsec saref = yes
listen-addr = xxx.xxx.xxx.xxx
[lns default]
ip range = 192.168.223.100-192.168.223.200
local ip = 192.168.223.10
refuse chap = yes
refuse pap = yes
require authentication = yes
ppp debug = yes
pppoptfile = /etc/ppp/options.xd
length bit = yes
xxx.xxx.xxx.xxx也要改成你自己的服务器外网IP ;这个主要在使用命令DEBUG: xd -D (debug 模式),可以监听客户端的登录。
b、vi /etc/ppp/options.xd
ipcp-accept-local
ipcp-accept-remote
ms-dns 114.114.114.114
ms-dns 8.8.8.8
ms-wins 192.168.1.2
ms-wins 192.168.1.4
noccp
auth
crtscts
idle 1800
mtu 1410
mru 1410
nodefaultroute
debug
lock
proxyarp
connect-delay 5000
3、启动
service xd restart
4、iptables
iptables -A INPUT -m policy --dir in --pol ipsec -j ACCEPT
iptables -A FORWARD -m policy --dir in --pol ipsec -j ACCEPT
iptables -t nat -A POSTROUTING -m policy --dir out --pol none -j MASQUERADE
iptables -A FORWARD -i ppp+ -p all -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -m policy --dir in --pol ipsec -p udp --dport 1701 -j ACCEPT
iptables -A INPUT -p udp --dport 500 -j ACCEPT
iptables -A INPUT -p udp --dport 4500 -j ACCEPT
iptables -t nat -A POSTROUTING -s 192.168.223.0/24 -o eth0 -j MASQUERADE
可以直接在终端执行每条命令,也可以把它写入文件vi /etc/rc.local
最后执行
service iptables save
service iptables restart
到这里所有的配置完成。
四、通过下面命令可以控制 serve
Start: /etc/init.d/xd start
Stop: /etc/init.d/xd stop
Restart: /etc/init.d/xd restart
DEBUG: xd -D (debug 模式)
五、总结
openswan(ipsec) : 提供一个密钥
ppp :提供用户名和密码
xd : 提供L2TP服务
sysctl : 提供服务器内部转发
iptables : 提供请求从服务器内部转向外部,外部响应转向服务器内部
六、window 客户端的配置
1、首先在Windows上建立这个客户端。
2、双击
3、点击属性
框框里的是服务器的ip地址
4、点击安全
VPN:类型选择L2TP,在点击高级设置
密钥,添加刚才服务器配置的 YourPsk,这个值可随便更改,只要跟服务器保存一致就行,点击确定。
5、连接
用户名:2018或2017 填写服务器中有配置的就行。
密码:相同操作。
参考文章:https://segmentfault.com/a/1190000006125737