背景:因公司业务逐渐迁移到阿里云上,所以有需求搭建一条从公司内容到阿里云的VPN隧道,因环境限制并未有vpn设备可以使用,所以计划在linux上搭建ipsecvpn来实现该功能。拓扑图如下:

wKioL1i0BkrhbedTAABPWjgsxZk800.png

目的:在阿里云服务器172.16.0.11和公司服务器192.168.6.79之间建立一条ipsec vpn隧道。实现两端私网网段的互访。其中私网地址分别是:172.16.0.11/16和192.168.0.0/16。


服务器版本:CentOS release6.5 (Final)


软件说明:

1. Openswan简介

Openswan是Linux下IPsec的最佳实现方式,其功能强大,最大程度地保证了数据传输中的安全性、完整性问题。
Openswan支持2.0、2.2、2.4以及2.6内核,可以运行在不同的系统平台下,包括X86、X86_64、IA64、MIPS以及ARM。
Openswan是开源项目FreeS/WAN停止开发后的后继分支项目,其分裂为两个项目,Openswan与 Strongswan,Openswan由三个主要组件构成:配置工具(ipsec命令脚本)、Key管理工具(pluto)、内核组件(KLIPS/26sec)
26sec使用2.6内核内建模块Netkey,用来替代Openswan开发的KLIPS模块,2.4及以下版本内核无Netkey模块支持,只能使用KLIPS。如果你用的是2.6.9以上的内核,推荐使用26sec,可以不用给内核打Nat-T补丁就可以使用NAT,2.6.9以下版本内核的NETKEY存在Bug,推荐使用KLIPS。IPSec差不多是最老的VPN标准了,她的依然很安全,当然是在配置好以后。言下之意,她的配置比较麻烦。本文下面将做说明。

因为FreeS/WAN已经在2004年三月停止开发,所以我们使用她的后继项目Openswan来做我们的IPSec实验。其相比FreeS/WAN有个好处,如果使用 26sec 的时候,Openswan不用打补丁,就可以用nat。

2. Openswan的安装
因为IPSec工作在网络层,所以需要系统内核态的支持,上面说过,有两个选择,用自带(26sec)的或用Openswan(KLIPS)的,为了方便(如何打补丁和编译内核不是本文讨论的重点),本文使用CentOS源中编译好的Openswan来进行实验。现在的Openswan已经内建些个好用的补丁,比如x.509和NAT Traversal的支持,使用起来非常的方便。你也可以用下面的命令来检验你的安装。# ipsec verify

3、Openswan的认证方式

Openswan支持许多不同的认证方式,包括RSA keys、pre-shared keys、xauth或x.509证书方式。本文使用最简单的口令PSK认证。

4、Openswan的连接方式

Network-To-Network方式
Network-To-Network方式是把两个网络连接成一个虚拟专用网络。当连接建立后,每个子网的主机都可透明地访问远程子网的主机。要实现此种连接方式,要满足以下两个条件:
I. 每个子网各自拥有一台安装有OpenSWan的主机作为其子网的出口网关或者路由;
II.每个子网的IP段不能有叠加


安装说明(其中任意一台服务器):

1、开启数据转发

# vim/etc/sysctl.conf

net.ipv4.ip_forward=1

net.ipv4.conf.default.rp_filter=0

2、关闭icmp重定向

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

# sysctl -p

3、关闭SELinux

#setenforce 0

4、安装openswan

# yum install openswan lsof -y

# rpm -ql openswan //查看安装了那些文件。

# ipsec --version //查看ipsec的版本

这里并没有加载任何的IPsec stack,当启动IPsec后悔自动加载系统自带的netkey。

# service ipsec start

# ipsec verify //对ipsec进行验证

wKiom1i2w1TAj4coAABpdBFJFWs798.png

#netstat -nplu //查看监听端口

wKioL1i2w7mCVyf-AABbAppC8Ww358.png

我们可以看到openswan监听在UDP的500和4500两个端口,其中500是用来IKE密钥交换协商,4500的NAT-T是nat穿透的。

Openswan配置(network-to-network):



version 2
config setup
plutostderrlog=/var/log/pluto.log//指定vpn的日志生成文件
protostack=netkey
nat_traversal=yes
virtual_private=
oe=off

conn net-to-net//指定该vpn连接的名字
authby=secret
type=tunnel
left=192.168.6.79//left是指本地主机。
leftsubnet=192.168.0.0/16
leftid=@test2
leftnexthop=%defaultroute
right=1.1.1.1 //right是指对端主机。
rightsubnet=172.16.0.0/16
rightid=@test1
rightnexthop=%defaultroute
auto=start //start表示自动连接vpn,add代表需要手动连接


同样的另外一台vpnserver上面,信息和上面一样,只要注意到left和right即可。


vim /etc/ipsec.secrets


192.168.6.79 0.0.0.0 : PSK "**************"


重启两个vpn服务

# service ipsec restart


启动我们创建的con名字


#ipsec auto --up net-to-net /当配置的auto=add 时,才需要手动启动,配置为start则不需要。


可以进入日志文件查看,连接日志

vim /var/log/pluto.log


Feb 23 20:11:44: "net-to-net" #1: transition from state STATE_MAIN_I2 to state STATE_MAIN_I3
Feb 23 20:11:44: "net-to-net" #1: STATE_MAIN_I3: sent MI3,expecting MR3
Feb 23 20:11:46: packet from 123.56.12.108:500: received vendor ID payload [Dead Peer Detection]
Feb 23 20:11:46: packet from 123.56.12.108:500: received vendor ID payload [FRAGMENTATION]
Feb 23 20:11:46: packet from 123.56.12.108:500: received vendor ID payload [RFC 3947]
Feb 23 20:11:46: packet from 123.56.12.108:500: ignoring vendor ID payload [draft-ietf-ipsec-nat-t-ike-03]
Feb 23 20:11:46: packet from 123.56.12.108:500: ignoring vendor ID payload [draft-ietf-ipsec-nat-t-ike-02_n]
Feb 23 20:11:46: packet from 123.56.12.108:500: ignoring vendor ID payload [draft-ietf-ipsec-nat-t-ike-02]
Feb 23 20:11:46: "net-to-net" #2: enabling possible NAT-traversal with method RFC 3947 (NAT-Traversal)
Feb 23 20:11:46: "net-to-net" #2: responding to Main Mode
Feb 23 20:11:46: "net-to-net" #2: transition from state STATE_MAIN_R0 to state STATE_MAIN_R1
Feb 23 20:11:46: "net-to-net" #2: STATE_MAIN_R1: sent MR1,expecting MI2
Feb 23 20:11:46: "net-to-net" #2: NAT-Traversal: Result using RFC 3947 (NAT-Traversal) sender port 500: I am behind NAT+peer behind NAT
Feb 23 20:11:46: "net-to-net" #2: transition from state STATE_MAIN_R1 to state STATE_MAIN_R2
Feb 23 20:11:46: "net-to-net" #2: STATE_MAIN_R2: sent MR2,expecting MI3
Feb 23 20:11:46: "net-to-net" #2: Main mode peer ID is ID_FQDN: '@test1'
Feb 23 20:11:46: "net-to-net" #2: transition from state STATE_MAIN_R2 to state STATE_MAIN_R3
Feb 23 20:11:46: "net-to-net" #2: new NAT mapping for #2,was 123.56.12.108:500,Now 123.56.12.108:4500
Feb 23 20:11:46: "net-to-net" #2: STATE_MAIN_R3: sent MR3,ISAKMP SA established {auth=PRESHARED_KEY cipher=aes_256 integ=sha group=MODP2048}
Feb 23 20:11:46: "net-to-net" #2: the peer proposed: 192.168.0.0/16:0/0 -> 172.16.0.0/16:0/0
Feb 23 20:11:46: "net-to-net" #3: responding to Quick Mode proposal {msgid:43be8e61}
Feb 23 20:11:46: "net-to-net" #3: us: 192.168.0.0/16===192.168.6.79<192.168.6.79>[@test2]
Feb 23 20:11:46: "net-to-net" #3: them: 123.56.12.108<123.56.12.108>[@test1]===172.16.0.0/16
Feb 23 20:11:46: "net-to-net" #3: transition from state STATE_QUICK_R0 to state STATE_QUICK_R1
Feb 23 20:11:46: "net-to-net" #3: STATE_QUICK_R1: sent QR1,inbound IPsec SA installed,expecting QI2 tunnel mode {ESP/NAT=>0xac8224cd <0x7f04b45c xfrm=AES_128-HMAC_SHA1 NATOA=none NATD=123.56.12.108:4500 DPD=passive}
Feb 23 20:11:46: "net-to-net" #3: transition from state STATE_QUICK_R1 to state STATE_QUICK_R2
Feb 23 20:11:46: "net-to-net" #3: STATE_QUICK_R2: IPsec SA established tunnel mode {ESP/NAT=>0xac8224cd <0x7f04b45c xfrm=AES_128-HMAC_SHA1 NATOA=none NATD=123.56.12.108:4500 DPD=passive}
Feb 23 20:12:48: "net-to-net" #1: max number of retransmissions (8) reached STATE_MAIN_I3. Possible authentication failure: no acceptable response to our first encrypted message
Feb 23 20:12:48: "net-to-net" #1: deleting state #1 (STATE_MAIN_I3)


当我们看到ipsec sa estabilished,就证明我们连接成功了,也可以从中看到一些加密方法,密钥交换参数,我们也可以在配置文件里面添加如下信息进行修改。
ike=aes256-sha2_256;modp2048
phase2alg=aes256-sha2_256;modp2048
然后在clinet1上面去ping对端子网的设备,可以看到如下,但是VPNServer是不能ping通对方子网的设备的。


openvpn搭建完成后,是不会生成虚拟网卡的,并且路由表也不需要指定。

wKiom1i2x1qQHIL-AABfxXd2RUg814.png

wKioL1i2x47RDwONAAAg-qhEODQ138.png


防火墙配置:


公司vpn服务器对外提供服务需要配置静态NAT,所以在防火墙上需要为服务器192.168.6.79设置对应的公网ip地址为2.2.2.2,并在策略中放行。


注:本次搭建vpn服务器总体上还算顺利,主要遇到的两个问题还是在阿里云上,由于对阿里云的网络结构不太熟悉,所以造成了问题。

  1. 阿里云给的公网地址1.1.1.1,实则是弹性IP,相当于公网IP并没有配置在虚拟云主机上,而是在阿里云的出口网关上(相当NAT),之前配置的时候,阿里云vpn服务器的left地址写成了公网地址1.1.1.1,造成连接失败。

  2. 阿里云提供的VPC实则是专有网络,内部网络间是做了二层隔离的,内部172.16.0.0/16网段的主机之间默认是可以互访的,但要访问192.168.0.0/16网段是不可以的,即使你在主机上添加了该路由,也是不能访问的。这也是我之前创建完vpn,连接也成功了,但就是不能访问对端子网的服务器地址。。。解决办法是:在VPC网络中的虚拟路由器的路由表中添加一条到192.168.0.0/24的路由,下一跳地址就写成阿里云的vpn服务器实例。具体阿里云VPC的知识可以看一下上一篇在网上转载的博文。

在centos上使用openswan搭建IPSecVPN的更多相关文章

  1. 如何使用android的“openvpn connect”应用程序结合意图以编程方式连接和断开vpn连接?

    我正在开发一个Android应用程序,应该在需要时自动启动OpenVPNConnect会话.如何使用android的“openvpnconnect”应用程序结合意图以编程方式连接和断开vpn连接?

  2. Android VPNService路由排除

    我正在使用OpenVPN和ICS附带的新VpnServiceAPI有没有办法从VPN隧道中定义IP地址的排除?

  3. CentOS 8.2服务器上安装最新版Node.js的方法

    这篇文章主要介绍了CentOS 8.2服务器上安装最新版Node.js的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  4. centos+php+coreseek+sphinx+mysql之一coreseek安装篇

    这篇文章主要介绍了centos+php+coreseek+sphinx+mysql之一coreseek安装篇的相关资料,非常不错具有参考借鉴价值,需要的朋友可以参考下

  5. Centos7 中 Node.js安装简单方法

    这篇文章主要介绍了Centos7 中 Node.js安装简单方法,非常不错具有一定的参考借鉴价值,需要的朋友可以参考下

  6. nodejs脚本centos开机启动实操方法

    在本篇文章里小编给大家整理的是关于nodejs脚本centos开机启动实操方法,有兴趣的朋友们参考下。

  7. Centos PHP 扩展Xchche的安装教程

    这篇文章主要介绍了Centos PHP 扩展Xchche的安装教程的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下

  8. Linux CentOS系统下安装node.js与express的方法

    这篇文章主要给大家介绍了在Linux CentOS系统下安装node.js与express的方法,文中介绍的非常详细,相信对大家具有一定的参考价值,需要的朋友们下面来一起看看吧。

  9. CentOS上安装Node.js和mongodb笔记

    这篇文章主要介绍了CentOS上安装Node.js和mongodb笔记,本文讲解了Python安装、Node.js安装、npm安装、mongodb驱动安装、mongodb数据库操作测试代码等内容,需要的朋友可以参考下

  10. centos7上编译安装php7以php-fpm方式连接apache

    这篇文章主要介绍了centos7上编译安装php7以php-fpm方式连接apache的相关知识,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下

随机推荐

  1. 在airgapped(离线)CentOS 6系统上安装yum软件包

    我有一个CentOS6系统,出于安全考虑,它已经被空气泄漏.它可能从未连接到互联网,如果有,它很长时间没有更新.我想将所有.rpm软件包放在一个驱动器上,这样它们就可以脱机安装而无需查询互联网.但是,我在测试VM上遇到的问题是,即使指定了本地路径,yum仍然会挂起并尝试从在线存储库进行更新.另外,有没有办法使用yum-utils/yumdownloader轻松获取该包的所有依赖项和所有依赖项?目前

  2. centos – 命名在日志旋转后停止记录到rsyslog

    CentOS6.2,绑定9.7.3,rsyslog4.6.2我最近设置了一个服务器,我注意到在日志轮换后,named已停止记录到/var/log/messages.我认为这很奇怪,因为所有日志记录都是通过rsyslog进行的,并且named不会直接写入日志文件.这更奇怪,因为我在更新区域文件后命名了HUPed,但它仍然没有记录.在我停止并重新启动命名后,记录恢复.这里发生了什么?

  3. centos – 显示错误的磁盘大小

    对于其中一个磁盘,Df-h在我的服务器上显示错误的空白区域:Cpanel表明它只有34GB免费,但还有更多.几分钟前,我删除了超过80GB的日志文件.所以,我确信它完全错了.fdisk-l/dev/sda2也显示错误:如果没有格式化,我该怎么做才能解决这个问题?并且打开文件描述符就是它需要使用才能做到这一点.所以…使用“lsof”并查找已删除的文件.重新启动写入日志文件的服务,你很可能会看到空间可用.

  4. 如何在centos 6.9上安装docker-ce 17?

    我目前正在尝试在centOS6.9服务器上安装docker-ce17,但是,当运行yuminstalldocker-ce时,我收到以下错误:如果我用跳过的标志运行它我仍然得到相同的消息,有没有人知道这方面的方法?

  5. centos – 闲置工作站的异常负载平均值

    我有一个新的工作站,具有不寻常的高负载平均值.机器规格是:>至强cpu>256GB的RAM>4x512GBSSD连接到LSI2108RAID控制器我从livecd安装了CentOS6.564位,配置了分区,网络,用户/组,并安装了一些软件,如开发工具和MATLAB.在启动几分钟后,工作站负载平均值的值介于0.5到0.9之间.但它没有做任何事情.因此我无法理解为什么负载平均值如此之高.你能帮我诊断一下这个问题吗?

  6. centos – Cryptsetup luks – 检查内核是否支持aes-xts-plain64密码

    我在CentOS5上使用cryptsetupluks加密加密了一堆硬盘.一切都很好,直到我将系统升级到CentOS6.现在我再也无法安装磁盘了.使用我的关键短语装载:我收到此错误:在/var/log/messages中:有关如何装载的任何想法?找到解决方案问题是驱动器使用大约512个字符长的交互式关键短语加密.出于某种原因,CentOS6中的新内核模块在由旧版本创建时无法正确读取512个字符的加密密钥.似乎只会影响内核或cryptsetup的不同版本,因为在同一系统上创建和打开时,512字符的密钥将起作用

  7. centos – 大量ssh登录尝试

    22个我今天登录CentOS盒找到以下内容这是过去3天内的11次登录尝试.WTF?请注意,这是我从我的提供商处获得的全新IP,该盒子是全新的.我还没有发布任何关于此框的内容.为什么我会进行如此大量的登录尝试?是某种IP/端口扫描?基本上有4名匪徒,其中2名来自中国,1名来自香港,1名来自Verizon.这只发生在SSH上.HTTP上没有问题.我应该将罪魁祸首子网路由吗?你们有什么建议?

  8. centos – kswap使用100%的CPU,即使有100GB的RAM也可用

    >Linux内核是否应该足够智能,只需从内存中清除旧缓存页而不是启动kswap?

  9. centos – Azure将VM从A2 / 3调整为DS2 v2

    我正在尝试调整前一段时间创建的几个AzureVM,从基本的A3和标准A3到标准的DS2v2.我似乎没有能力调整到这个大小的VM.必须从头开始重建服务器会有点痛苦.如果它有所不同我在VM中运行CentOS,每个都有一个带有应用程序和操作系统的磁盘.任何人都可以告诉我是否可以在不删除磁盘的情况下删除VM,创建新VM然后将磁盘附加到新VM?

  10. centos – 广泛使用RAM时服务器计算速度减慢

    我在非常具体的情况下遇到服务器速度下降的问题.事实是:>1)我使用计算应用WRF>2)我使用双XeonE5-2620v3和128GBRAM(NUMA架构–可能与问题有关!

返回
顶部