CentOS 7 下基于libreswan(openswan)与xl2tpd的ipsec VPN通信环境的搭建(服务端与客户端)

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_41191281/article/details/81139015

1.准备阶段

最近对VPN很感兴趣(虽然我不用)于是乎想利用虚拟机的虚拟网络来,搭建一个site to site 的VPN通信环境来连接两个内网(先用虚拟机来试验试验),我对虚拟机的虚拟网段的IP进行了更改(为了方便记忆),vmnet1为192.168.10网段、vmnet2为192.168.20网段······以此类推。

其网络的拓扑图如下(vmnet8为虚拟机里net模式的虚拟网络,具体在虚拟网络编辑器里设置)

如图 ,两个内网网段分别是

left:192.168.10.0/24

right:192.168.20.0/24

左右两个VPN服务器都有两个网卡,一个为内网的,另一个为外网的(vmnet8),其地址在图中已表示。图中用一个路由器来表示两个服务器在外网网段内的连接(其实简化了许多)。

PS:在vmware虚拟机上添加网卡(默认只有一个)

打开虚拟机后,在开启的下面,点击编辑虚拟机设置,在弹出的对话框中点击添加,选择网络适配器即可,之后在编辑虚拟机的对话框内,设置两个网卡一个为vmnet8,一个为vmnet1(另一个vmnet2)。

接下来开启虚拟机,打开之后先用ifconfig看一下有没有地址配上,如果发现网卡(我的是ens33与ens37)下面没有IP地址相匹配,则需要修改一下配置

 #vi /etc/sysconfig/network-scripts/ifcfg-ens33

将里面的ONBOOT=no改为ONBOOT=yes

之后再重启一下network就行了

#systemctl restart network

再ifconfig就正常了,记住两个网卡的IP地址之后要用。

接下来开启数据转发:

# vim /etc/sysctl.conf

对这个文件进行改动添加 :

net.ipv4.ip_forward = 1
net.ipv4.conf.default.rp_filter = 0

net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.default.send_redirects = 0


添加这些就可以了(有些情况下不添加好像也行,还是保险些吧>>_>>),接下来是关闭icmp重定向

# sysctl -a | egrep "ipv4.*(accept|send)_redirects" | awk -F "=" '{print$1"= 0"}' >> /etc/sysctl.conf

之后再运行

# sysctl -p

运行完这个后会发现/etc/sysctl.conf中又会多出一些多东西那些是系统自动生成的关于自身网卡的

最后我们关闭SELinux,准备工作就结束了!

#setenforce 0

 

2.下载openswan(libreswan)与xl2tpd

在centos上我是直接用yum 下载的,首先安装epel源,要不你下载openswan与xl2tpd是会显示没有这个包

yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

安装完后直接yum正常下载就行了

#yum install openswan -y

#yum install xl2tpd

安装往后细心的会发现我们安装是libreswan, 其实与openswan 都差不多,这个不用细究。

我们可以先启动一下ipsec与xl2tpd 看看有没有什么问题(这个阶段一般不会有问题,不过还是启动一下看一看)

#systemctl start ipsec

#systemctl start xl2tpd

#ipsec verify 来验证一下是这个样子的:

如果不能正常启动那就卸了重装。

接下来通过netstat -anp可以看到openswan 监视再500与4500端口:

#netstat -anp

3.服务端配置相关文件

在这里我们采用基于RSA的数字签名算法的认证方式,首先我们初始化NSS数据库:/etc/ipsec.d中,

#ipsec initnss --nssdir /etc/ipsec.d

之后再生成新的本机密钥

#ipsec newhostkey --output /etc/ipsec.secrets

这里的ckaid 后面的一大串字符要记录下来之后有用

之后再生成本机的公钥,这里为right的服务器上:

#ipsec showhostkey --right --ckaid "上面CKAID后面的字符串"

当在左边的服务器是把上面的 --right 改为 --left,在这里的rightrsasigkey(leftrsasigkey)要记录下来之后的配置文件里都要用到。

接下来在/etc/ipsec.d/文件下创建自己的连接配置文件mytunnel.conf,这个是两个服务器VPN通信的配置文件

#touch /etc/ipsec.d/mytunnel.conf

接着开始编写这个配置文件:

上面的rightrsasigkey(leftrsasigkey)为刚刚生成的服务器的公钥,到时候传输过程中会利用这个公钥进行加密以保证安全

left与right分别为两个服务器位于80(vmnet8)网段的网卡的地址(之前记录过),leftsubnet(rightsubnet)为服务器另两个网卡所属的想要利用VPN进行通信的两个内网的地址(本例中为10网段与20网段)。leftnexthop(rightnexthop)设置为默认路由就行了,auto设置为start,到时候启动ipsec时就会自动引入mytunnel配置文件。

接下来修改/etc/ipsec.conf文件

#vi /etc/ipsec.conf

在virtual下面加上这三个就行了:(virtual的值不要改动!!)

接下来对xl2tpd相关文件进行配置:

#vi /etc/xl2tpd/xl2tpd.conf

vi /etc/ppp/options.xl2tpd

其中的ip range为内网中希望允许进行通信的IP地址区间,local ip为服务器位于内网的网卡的ip地址。其余的照着写上就行了。

然后添加客户端可以使用的的xl2tpd用户的用户名与密码

#vi /etc/ppp/chap-secrets

接下来还需要修改一下防火墙的策略,直接运行下面这几行代码就行:

#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 -t nat -A POSTROUTING -s 192.168.1.0/24 -o em1 -j MASQUERADE

#iptables -I INPUT -p udp -m multiport --dport 1701,4500,500 -j ACCEPT

#iptables -t nat -A POSTROUTING -s 192.168.20.0/24 -o em1 -j MASQUERADE

#iptables -I FORWARD -s 192.168.20.0/24 -j ACCEPT

#iptables -I FORWARD -d 192.168.20.0/24 -j ACCEPT

最后三条命令里面的ip要改为服务器所在的内网的网段。

两端的服务器都是如此的配置

最后重启ipsec 与xl2tpd就行了

#systemctl restart ipsec

#systemctl restart xl2tpd

再查看一下ipsec的运行状态看看是否已经连接:

systemctl status -l ipsec

到此服务端的配置就已经完事了。接下来看看在Linux与Windows下如何连接服务器进行通信

4.客户端配置相关文件

4.1Linux下的配置(centos7):

首先在客户端下载xl2tpd之前已经说过了

下载完后首先编辑/etc/xl2tpd/xl2tpd.conf文件

上面的那些不用动,将里面的[lns ....]那个栏目删去就行了,直接添加图中的[lac l2tpvpn]栏目。

接下来编辑/etc/ppp/options.xl2tpd文件:

user与password为在服务端中设置的用户名与密码。

接下来在如下目录中创建l2tpd-control控制文件:

然后重启(启动)xl2tpd引入客户端的lac配置:

#systemctl restart xl2tpd

# xl2tpd -c /etc/xl2tpd/xl2tpd.conf

# echo 'c l2tpvpn' >/var/run/xl2tpd/l2tp-control

查看ip link 看看是否已经出现了ppp通信隧道(客户端与主机):

会看到下面有一个ppp0,这里就已经成功建立好了!

这里都会看到已经建立成功!

下来在客户端添加路由表(另一个要通信的内网网段与服务器通信所在的80网段):

# ip route add 192.168.80.0/24 via 192.168.10.1

# ip route add 192.168.20.0/24 via 192.168.10.1

192.168.10.1为ifconfig 后所看到的ppp0所使用的隧道通信的地址

之后再ping  80网段与20网段(内网)的服务器地址均能ping通。site to site vpn 通信搭建成功!!!!!

在80网段与10网段进行抓包分析:

两个服务器间的80网段上的来自数据包客户端的数据包,已经加密(ESP加密包),状态正常。

服务器与客户端的通信使用的也是l2tp数据包,一切正常,哈哈哈哈哈~~~

4.2Windows10客户端上的配置

Windows上的配置就比较简单了

点击添加

如上配置,然后保存即可

点击连接,之后输入服务端中设置的用户名与密码即可

连接成功!!!

ping也通了,有时候会超时,这个不用担心,去另一个内网的客户端ping一下,再回来ping就通了

因为有一个路由表的更新过程。

 

至此大功告成!!!

 

 

 

展开阅读全文

没有更多推荐了,返回首页