主要的实现步骤
- openswan(ipsec) : 提供一个密钥
- ppp :提供用户名和密码
- xl2tpd : 提供L2TP服务
- sysctl : 提供服务器内部转发
- iptables : 提供请求从服务器内部转向外部,外部响应转向服务器内部(内网需要在路由器做映射)
安装开始
1.安装openswan
apt-get install openswan
如果出现报错 Package ‘openswan‘ has no installation candidate 请执行以下命令,如果顺利安装请直接看第二步
vim /etc/apt/sources.list.d/lzu.list
粘贴如下代码到lzu.list文件
deb http://mirror.lzu.edu.cn/ubuntu/ precise main restricted universe multiverse
deb http://mirror.lzu.edu.cn/ubuntu/ precise-security main restricted universe multiverse
deb http://mirror.lzu.edu.cn/ubuntu/ precise-updates main restricted universe multiverse
deb http://mirror.lzu.edu.cn/ubuntu/ precise-proposed main restricted universe multiverse
deb http://mirror.lzu.edu.cn/ubuntu/ precise-backports main restricted universe multiverse
deb-src http://mirror.lzu.edu.cn/ubuntu/ precise main restricted universe multiverse
deb-src http://mirror.lzu.edu.cn/ubuntu/ precise-security main restricted universe multiverse
deb-src http://mirror.lzu.edu.cn/ubuntu/ precise-updates main restricted universe multiverse
deb-src http://mirror.lzu.edu.cn/ubuntu/ precise-proposed main restricted universe multiverse
deb-src http://mirror.lzu.edu.cn/ubuntu/ precise-backports main restricted universe multiverse
更新一下源
apt-get update
安装openswan
apt-get -y install openswan
/etc/ipsec.conf
把下面的内容直接全部拷贝为新文件的内容(更改服务器地址就可以了)
config setup
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
配置密钥文件 vim /etc/ipsec.secrets
然后把下面的内容放到新建的配置文件中:
xxx.xxx.xxx.xxx %any: PSK "YourPsk"
上面的xxx.xxx.xxx.xxx
是服务器的IP,而后面的"YourPsk"中的YourPsk就是密钥的内容。你可以改为自己的任意字符串。反正在你连接登录VPN的时候,是需要这个PSK的。
运行ipsec.
ipsec setup restart
有两个星号,第一个表示以后所有使用PPP作为用户认证的服务,都可以使用这个用户名和密码,包括PPTP和L2TP都可以使用loginname。第二个星号表示这个用户可以从任何IP登录。如果你希望控制一下,可以把星号改成具体的值来限制。
xl2tpd
就像pptp和pptpd一样,L2TP也依赖于xl2tpd。
apt-get install xl2tpd
安装好xl2tpd之后,我们进行配置。它的配置文件有两个,一个是/etc/xl2tpd/xl2tpd.conf一个是/etc/ppp/options.xl2tpd(也有可能没有,我们自己创建一个就可以),其实第一个文件把第二个文件包含进来而已。
vim /etc/xl2tpd/xl2tpd.conf
把下面的内容写进去:
[global]
ipsec saref = yes
listen-addr = xxx.xxx.xxx.xxx #你的服务器地址
[lns default]
ip range = 192.168.1.2-192.168.1.100
local ip = 192.168.1.1
refuse chap = yes
refuse pap = yes
require authentication = yes
ppp debug = yes
pppoptfile = /etc/ppp/options.xl2tpd
length bit = yes
再配置vim /etc/ppp/options.xl2tpd
写入下面的内容:
ipcp-accept-local
ipcp-accept-remote
require-mschap-v2
ms-dns 114.114.114.114
ms-dns 8.8.4.4
asyncmap 0
auth
crtscts
lock
hide-password
modem
debug
name l2tpd
proxyarp
lcp-echo-interval 30
lcp-echo-failure 4
mtu 1400
noccp
connect-delay 5000
logfile /var/log/xl2tpd.log
这样,xl2tpd的配置就好了
sysctl
sysctl的功能是开启转发。它能够将服务器内部的ip地址关系进行转发和映射,从而实现我们链接VPN之后的用户,能够通过内部的一些端口进行请求的转发。
vim /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
这样配置就生效了。
iptables(根据自己的来)
iptables --table nat --append POSTROUTING --jump MASQUERADE
iptables -t nat -A POSTROUTING -s 10.0.0.0/22 -o eth0 -j MASQUERADE
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -I FORWARD -s 10.0.0.0/22 -j ACCEPT
iptables -I FORWARD -d 10.0.0.0/22 -j ACCEPT
iptables -A FORWARD -j REJECT
iptables -A INPUT -p udp -m state --state NEW -m udp --dport 1701 -j ACCEPT
iptables -A INPUT -p udp -m state --state NEW -m udp --dport 500 -j ACCEPT
iptables -A INPUT -p udp -m state --state NEW -m udp --dport 4500 -j ACCEPT
mkdir /etc/iptables
iptables-save > /etc/iptables/iptables.rules
启动 IPSEC 服务并检测 IPSEC 是否正常工作
/etc/init.d/ipsec start
如果出现错误请参考以下命令
最后重启 service ipsec restart
重启l2tp
service xl2tpd restar
客户端连接测试 手机 win mac 使用l2tp协议