CentOS L2TP/IPSec vpn
CentOS L2TP/IPSec vpn
基于 centos 6
- 需要开发人员在外网可以拨号到开发环境调试代码。
- 开发人员拨号后只能访问部分地址,需要通过vpn服务器做SNAT,但是只对服务器内网的某几台机器。
- 需要控制vpn服务器的用户密码,系统用户登陆vpn机器后是可以通达整个内网的。
- 对vpn端口做外网固定IP的映射。
安装软件
关闭selinux
- 安装依赖和xl2tpd服务
1
2yum install -y make gcc gmp-devel xmlto bison flex xmlto libpcap-devel lsof man
yum install openswan ppp xl2tpd
修改配置文件
配置ipsec
vim /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
23config setup
protostack=netkey
dumpdir=/var/run/pluto/
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,%v4:100.64.0.0/10,%v6:fd00::/8,%v6:fe80::/10
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=0.0.0.0 # 监听地址,也可以改为外网IP或域名
leftprotoport=17/1701 # 监听的端口1701
right=%any
rightprotoport=17/%any
include /etc/ipsec.d/*.confvim /etc/ipsec.secrets
1
2
3include /etc/ipsec.d/*.secrets
0.0.0.0 %any: PSK "xxx.gz"
上面"xxx.gz"为预共享密钥,客户端连接时候需要填写修改内核参数
- vim /etc/sysctl.conf
1
2
3
4
5
6
7
8
9
10net.ipv4.ip_forward = 1
net.ipv4.conf.default.rp_filter = 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.default.accept_source_route = 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
生效
- vim /etc/sysctl.conf
验证ipsec状态
- ipsec setup restart
- ipsec verify #可能有部分出错信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17.....
Hardware random device [N/A]
Two or more interfaces found, checking IP forwarding [OK]
Checking rp_filter [ENABLED]
/proc/sys/net/ipv4/conf/enp2s0/rp_filter [ENABLED] # 出现这种网卡设备
/proc/sys/net/ipv4/conf/enp3s7/rp_filter [ENABLED] # 错误的不用管
rp_filter is not fully aware of IPsec and should be disabled # 继续后面步骤
Checking that pluto is running [OK]
Pluto listening for IKE on udp 500 [OK]
Pluto listening for IKE/NAT-T on udp 4500 [OK]
Pluto ipsec.secret syntax [OK]
Checking ‘ip’ command [OK]
Checking ‘iptables’ command [OK]
Checking ‘prelink’ command does not interfere with FIPSChecking for obsolete ipsec.conf options [OK]
Opportunistic Encryption [DISABLED]
ipsec verify: encountered 5 errors – see ‘man ipsec_verify’ for help
启动ipsec服务,加入开机启动项
1
2service ipsec restart
chkconfig ipsec on
配置xl2tpd和ppp认证
vim /etc/xl2tpd/xl2tpd.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15[global]
ipsec saref = yes
[lns default]
; vpn客户端地址段
ip range = 10.1.2.10-10.1.2.254
; vpn服务器地址
local ip = 10.1.2.1
require chap = yes
refuse pap = yes
require authentication = yes
name = LinuxVPNserver
ppp debug = yes
pppoptfile = /etc/ppp/options.xl2tpd
length bit = yescat /etc/ppp/options.xl2tpd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16require-mschap-v2
#ms-dns 8.8.8.8
#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
# 指定日志文件
logfile /var/log/xl2tpd.log配置登陆用户的认证
vim /etc/ppp/chap-secrets1
2
3
4
5# Secrets for authentication using CHAP
# client server secret IP addresses
an00 * passwd *
#用户名 服务器 密码 ip地址重启xl2tpd服务,添加到开机启动项
1
2service xl2tpd restart
chkconfig xl2tpd on
配置SNAT,允许vpn客户端访问服务器内网部分机器
原来是没开启iptables的,所以没有其他规则
在NAT链添加如下规则,只对vpn客户端到内网部分地址做NAT转发
vim /etc/sysconfig/iptables1
2
3
4
5
6
7
8*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A POSTROUTING -s 10.1.2.0/24 -d 172.16.88.125 -o eth0 -j MASQUERADE
-A POSTROUTING -s 10.1.2.0/24 -d 172.16.88.126 -o eth0 -j MASQUERADE
-A POSTROUTING -s 10.1.2.0/24 -d 172.16.88.185 -o eth0 -j MASQUERADE
COMMIT启动iptables,加入到开机启动项
1
2service iptables restart
chkconfig iptables on
客户端连接配置
点击右下角网络连接图标
在出现的设置中左侧点击”VPN”,然后右侧点击”添加VPN连接”
预共享密钥是上文描述的ipsec.secrets中配置项
保存,后续即可连接。需要修改注册表按
win+r
键输入regedit
1
2
3
4
5路径:[HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/RasMan/Parameters]
修改:ProhibitIPSec的值修改为1
如果没有ProhibitIPSec项,需要点击右键新建一个dword,重命名为ProhibitIPSec,值设置为1
重启你的本地电脑,一定记得重启。建议做完下面步骤再拨号。
解决拨号后外网不能上的问题
按上面第一步打开”网络设置“
左侧选择”以太网“,在右侧”相关设置中“点击”更改适配器选项“
新窗口中找到vpn适配器右击 –> 属性
点击”网络“选项卡 –>双击internet协议版本(TCP/IPv4)
点击高级 –> IP设置选项卡 –> 取消勾选”在远程网络上使用默认网关“和它的子项
然后一路确定。在桌面编辑一个”xxx.bat”结尾的文件,添加如下内容
1
route add 172.16.88.0 mask 255.255.255.0 10.1.2.1
每次拨号后以管理员身份执行上面的命令会添加一个路由,外网还是走本地网络。
Comments