在Linux中使用Openswan搭建站点到站点的IPsec VPN 隧道

在Linux中使用Openswan搭建站点到站点的IPsec VPN 隧道

虚拟私有网络(VPN)隧道是通过Internet隧道技术将两个不同地理位置的网络安全的连接起来的技术。当两个网络是使用私有IP地址的私有局域网络时,它们之间是不能相互访问的,这时使用隧道技术就可以使得两个子网内的主机进行通讯。例如,VPN隧道技术经常被用于大型机构中不同办公区域子网的连接。

有时,使用VPN隧道仅仅是因为它很安全。服务提供商与公司会使用这样一种方式架设网络,他们将重要的服务器(如,数据库,VoIP,银行服务器)放置到一个子网内,仅仅让有权限的用户通过VPN隧道进行访问。如果需要搭建一个安全的VPN隧道,通常会选用IPsec,因为IPsec VPN隧道被多重安全层所保护。

这篇指导文章将会告诉你如何构建站点到站点的 VPN隧道。

拓扑结构

这边指导文章将按照以下的拓扑结构来构建一个IPsec 隧道。

安装软件包以及准备VPN服务器

一般情况下,你仅能管理A点,但是根据需求,你可能需要同时管理A点与B点。我们从安装Openswan软件开始。

基于Red Hat的系统(CentOS,Fedora,或RHEL):


  1. # yum install openswan lsof

在基于Debian的系统(Debian,Ubuntu或Linux Mint):


  1. # apt-get install openswan

现在禁用VPN的重定向功能,如果有服务器,可以执行下列命令:


  1. # for vpn in /proc/sys/net/ipv4/conf/*;
  2. # do echo 0 > $vpn/accept_redirects;
  3. # echo 0 > $vpn/send_redirects;
  4. # done

接下来,允许IP转发并且禁重定向功能。


  1. # vim /etc/sysctl.conf


  1. net.ipv4.ip_forward = 1
  2. net.ipv4.conf.all.accept_redirects = 0
  3. net.ipv4.conf.all.send_redirects = 0

重加载 /etc/sysctl.conf文件:


  1. # sysctl -p

在防火墙中启用所需的端口,并保证不与系统当前的规则冲突。


  1. # iptables -A INPUT -p udp --dport 500 -j ACCEPT
  2. # iptables -A INPUT -p tcp --dport 4500 -j ACCEPT
  3. # iptables -A INPUT -p udp --dport 4500 -j ACCEPT

最后,我们为NAT创建防火墙规则。


  1. # iptables -t nat -A POSTROUTING -s site-A-private-subnet -d site-B-private-subnet -j SNAT --to site-A-Public-IP

请确保上述防火墙规则是持久有效的(LCTT 译注:你可以save这些规则或加到启动脚本中)。

注意:

  • 你可以使用MASQUERAD替代SNAT(iptables)。理论上说它也能正常工作,但是有可能会与VPS发生冲突,所以我仍然建议使用SNAT。
  • 如果你同时在管理B点,那么在B点也设置同样的规则。
  • 直连路由则不需要SNAT。

准备配置文件

我们将要用来配置的第一个文件是ipsec.conf。不论你将要配置哪一台服务器,总是将你这端的服务器看成是左边的,而将远端的看作是右边的。以下配置是在站点A的VPN服务器做的。


  1. # vim /etc/ipsec.conf


  1. ## general configuration parameters ##
  2.  
  3. config setup
  4. plutodebug=all
  5. plutostderrlog=/var/log/pluto.log
  6. protostack=netkey
  7. nat_traversal=yes
  8. virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/16
  9. ## disable opportunistic encryption in Red Hat ##
  10. oe=off
  11.  
  12. ## disable opportunistic encryption in Debian ##
  13. ## Note: this is a separate declaration statement ##
  14. include /etc/ipsec.d/examples/no_oe.conf
  15.  
  16. ## connection definition in Red Hat ##
  17. conn demo-connection-redhat
  18. authby=secret
  19. auto=start
  20. ike=3des-md5
  21. ## phase 1 ##
  22. keyexchange=ike
  23. ## phase 2 ##
  24. phase2=esp
  25. phase2alg=3des-md5
  26. compress=no
  27. pfs=yes
  28. type=tunnel
  29. left=<siteA-public-IP>
  30. leftsourceip=<siteA-public-IP>
  31. leftsubnet=<siteA-private-subnet>/netmask
  32. ## for direct routing ##
  33. leftsubnet=<siteA-public-IP>/32
  34. leftnexthop=%defaultroute
  35. right=<siteB-public-IP>
  36. rightsubnet=<siteB-private-subnet>/netmask
  37.  
  38. ## connection definition in Debian ##
  39. conn demo-connection-debian
  40. authby=secret
  41. auto=start
  42. ## phase 1 ##
  43. keyexchange=ike
  44. ## phase 2 ##
  45. esp=3des-md5
  46. pfs=yes
  47. type=tunnel
  48. left=<siteA-public-IP>
  49. leftsourceip=<siteA-public-IP>
  50. leftsubnet=<siteA-private-subnet>/netmask
  51. ## for direct routing ##
  52. leftsubnet=<siteA-public-IP>/32
  53. leftnexthop=%defaultroute
  54. right=<siteB-public-IP>
  55. rightsubnet=<siteB-private-subnet>/netmask

有许多方式实现身份验证。这里使用预共享密钥,并将它添加到文件 /etc/ipsec.secrets。


  1. # vim /etc/ipsec.secrets


  1. siteA-public-IP siteB-public-IP: PSK "pre-shared-key"
  2. ## in case of multiple sites ##
  3. siteA-public-IP siteC-public-IP: PSK "corresponding-pre-shared-key"

启动服务并排除故障

目前,服务器已经可以创建站点到站点的VPN隧道了。如果你可以管理B站点,请确认已经为B服务器配置了所需的参数。对于基于Red Hat的系统,使用chkconfig命令以确定这项服务以设置为开机自启动。


  1. # /etc/init.d/ipsec restart

如果所有服务器没有问题的话,那么可以打通隧道了。注意以下内容后,你可以使用ping命令来测试隧道。

  1. A点不可达B点的子网,当隧道没有启动时ping不通。
  2. 隧道启动后,在A点直接ping B点的子网IP,是可以ping通的。

并且,到达目的子网的路由也会出现在服务器的路由表中。(LCTT译注:这里“子网”指的是site-B,“服务器”指的是site-A)


  1. # ip route


  1. [siteB-private-subnet] via [siteA-gateway] dev eth0 src [siteA-public-IP]
  2. default via [siteA-gateway] dev eth0

另外,我们可以使用命令来检测隧道的状态。


  1. # service ipsec status


  1. IPsec running - pluto pid: 20754
  2. pluto pid 20754
  3. 1 tunnels up
  4. some eroutes exist


  1. # ipsec auto --status


  1. ## output truncated ##
  2. 000 "demo-connection-debian": myip=<siteA-public-IP>; hisip=unset;
  3. 000 "demo-connection-debian": ike_life: 3600s; ipsec_life: 28800s; rekey_margin: 540s; rekey_fuzz: 100%; keyingtries: 0; nat_keepalive: yes
  4. 000 "demo-connection-debian": policy: PSK+ENCRYPT+TUNNEL+PFS+UP+IKEv2ALLOW+SAREFTRACK+lKOD+rKOD; prio: 32,28; interface: eth0;
  5.  
  6. ## output truncated ##
  7. 000 #184: "demo-connection-debian":500 STATE_QUICK_R2 (IPsec SA established); EVENT_SA_REPLACE in 1653s; newest IPSEC; eroute owner; isakmp#183; idle; import:not set
  8.  
  9. ## output truncated ##
  10. 000 #183: "demo-connection-debian":500 STATE_MAIN_I4 (ISAKMP SA established); EVENT_SA_REPLACE in 1093s; newest ISAKMP; lastdpd=-1s(seq in:0 out:0); idle; import:not set

日志文件/var/log/pluto.log记录了关于身份验证,密钥交换以及隧道处于不同时期的一些信息。如果你的隧道无法启动了,可以查看这个文档。

如果你确信所有配置都是正确的,但是你的隧道任然无法启动,那么你需要检查以下的事件。

  1. 很多ISP会过滤IPsec端口。确认你的网络ISP允许使用UDP 500, TCP/UDP 4500端口。你可以试着在远端通过telnet连接服务器的IPsec端口。
  2. 确认所用的端口在服务器防火墙规则中是允许的。
  3. 确认两端服务器的预共享密钥是一致的。
  4. 左边和右边的参数应该正确配置在两端的服务器上
  5. 如果你遇到的是NAT问题,试着使用SNAT替换MASQUERADING。

总结,这篇指导重点在于使用Openswan搭建站点到站点IPsec VPN的流程。管理员可以使用VPN使得一些重要的资源仅能通过隧道来获取,这对于加强安全性很有效果。同时VPN确保数据不被监听以及劫持。

希望对你有帮助。让我知道你的意。

原文发布时间:2014-11-14

本文来自云栖合作伙伴“linux中国”

时间: 2024-12-30 23:10:44

在Linux中使用Openswan搭建站点到站点的IPsec VPN 隧道的相关文章

linux中使用Nginx搭建反向代理服务器

一.反向代理:Web服务器的"经纪人" 1.1 反向代理初印象 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器. 从上图可以看出:反向代理服务器位于网站机房,代理网站Web服务器接收Http请求,对请求进行转发. 1.2 反向代理的作用 ①保护网站安全:任何来自Internet的请求都必须先经过代理服务

Linux中使用Gitolite 搭建 Git 服务器(服务器和客户端可以为同一台机器)

一般来说,配置git服务器的话,需要一台服务器,还需要一个客户端来验证服务器是否搭建成功,而一般开发者基本都只有一台服务器,那就需要这台服务器既作为Git的服务器,又要作为客户端来使用了,下面的教程就是以服务器和客户端都是同一台服务器为例的.如果需要服务器和客户端分开的话,只需要将下面列出的服务器端和客户端的操作到相应的机器上操作就可以了. 第一步(服务器端):创建git服务器专用账户 账户名字就叫git吧,创建之后为其设置密码  代码如下 复制代码 # useradd -m -s /bin/b

linux中SSH环境搭建详解

Struts部分 web.xml中配置: <filter>     <filter-name>struts2</filter-name>     <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> classpath:struts.xml配置 <?xml versi

Linux下DNS服务器搭建详解

Linux下DNS服务器搭建详解 简介: DNS服务器的作用就是就好比生活中的电话簿.114查号台一样,为各种网络程序找到对应目标主机的IP地址或对应的主机域名. DNS系统的作用: 正向解析:根据主机名称(域名)查找对应的IP地址(实际应用中最多的) 反向解析:根据IP地址查找对应的主机域名(不常用,一般用于搭建邮件服务器时.) 根据服务器与所提供域名解析记录的关系,将DNS服务器分为不同的角色: 缓存域名服务器 也称为 唯高速缓存服务器 通过向其他域名服务器查询获得域名->IP地址记录 将域

linux中PHP dirname(

  在php 中dirname() 函数返回路径中的目录部分,__FILE__而当前运行文件的完整路径和文件名.如果用在被包含文件中,则返回被包含的文件名.这是一个魔法变量(预定义常量),在windows中没有问题但在linux中路径出现的问题,下面我们一起来看看路径问题解决方法. 近期在给wordpress开发模板功能时发现,直接使用include("文件名")的形式调用其他php代码片段时会出现路径错误.之前服务器环境一直都是iis,未曾出现过类似的BUG,但换成linux服务器后

Oracle DG Linux平台物理Standby搭建实例

Oracle Data Guard Linux 平台 Physical Standby 搭建实例 Data Guard 环境: 操作系统: redhat 4.7 Primary数据库: IP地址:10.85.10.1. 数据库SID:orcl DB_UNIQUE_NAME:orcl_pd Standby数据库: IP地址:10.85.10.2 数据库SID:orcl. DB_UNIQUE_NAME:orcl_st 一.rimary 端的配置 1.  主库设置为force logging 模式 S

Linux下nfs服务器搭建技巧

  使用linux进行嵌入式开发的时候,为了方便开发,通常是将开发板挂载到宿主机的文件系统上,然后将代码放到共享给开发板的目录中,再通过开发板运行. 首先查看是否安装了 nfs 软件包,yum list installed | grep nfs.如果安装,则可进行下面设置. nfs 服务器端配置: 1.首先建立共享目录:在根目录下建立share目录.执行 mkdir /share 2.然后对 exports 文件进行编辑:vim /etc/exports 如果之前没有通过 nfs 共享过目录,该

Linux 中RPM命令参数使用详解

  此工具包最先是由Red Hat公司推出的,后来被其他Linux开发商所借用.由于它为Linux使用者省去了很多时间,所以被广泛应用于在Linux下安装.删除软件.下面就给大家介绍一下它的具体使用方法. 1.我们得到一个新软件,在安装之前,一般都要先查看一下这个软件包里有什么内容,假设这个文件是:Linux-1.4-6.i368.rpm,我们可以用这条命令查看: rpm -qpi Linux-1.4-6.i368.rpm 系统将会列出这个软件包的详细资料,包括含有多少个文件.各文件名称.文件大

在Linux中模拟击键和鼠标移动

在Linux中模拟击键和鼠标移动 `你是否曾经拥有一个梦 --你的计算机 可以自动为你干活? 或许,并非因为 你刚看了终结者. 然而,除此之外 脚本和任务自动化 是每个高级用户追寻的梦 如果今天 有许多的解决方案 可以满足这个目标 那么 有时候 就难以从那众多之中采撷那 简洁.聪明而又高效的一个 我 不能假装 是我自己发现了它 而与此同时 却偏爱着那个 整洁的软体--xdotool 其方法是如此直观 正如它作为X11自动化工具的表露 转换思想 xdotool可以通过读取文本文件 模拟击键的旋律