当前位置: 首页 > 科技观察

如何在Linux中使用Openswan建立点对点的IPsecVPN隧道?

时间:2023-03-15 10:39:18 科技观察

虚拟专用网络(VPN)隧道用于通过基于互联网的隧道安全地互连两个不同的物理网络。当不同的网络是具有全局不可路由的专用IP地址的专用以太网子网时,需要隧道,因为这些子网无法通过传统的基于Internet的路由相互连接。例如,VPN隧道经常被建立来连接属于同一组织的不同分支机构网络,使用网络地址转换(NAT)技术。有时,出于安全考虑,也可以使用VPN隧道机制。服务提供商或私营公司以这样一种方式设计他们的网络,即关键服务器(例如数据库、VoIP或银行服务器)部署在只有受信任的人员才能通过VPN隧道访问的子网中。当需要安全的VPN隧道时,IPsec通常是首选,因为IPsecVPN隧道受到多层安全机制的保护。本教程将演示在Linux中使用Openswan设置站点到站点VPN隧道是多么容易。拓扑本教程将重点介绍以下用于建立IPsec隧道的拓扑。安装软件包并准备VPN服务器一般情况下只需要管理站点A,但根据实际需要,可以同时管理站点A和站点B。让我们从安装Openswan开始。在基于RedHat的系统(CentOS、Fedora或RHEL)上:#yuminstallopenswanlsof在基于Debian的系统(Debian、Ubuntu或LinuxMint)上:#apt-getinstallopenswan现在,我们使用以下命令在服务器中禁用VPN重新安装:,如果有VPN重定向:#forvpnin/proc/sys/net/ipv4/conf/*;#doecho0>$vpn/accept_redirects;#echo0>$vpn/send_redirects;#doneNext,我们更改内核参数,允许IP转发,永久禁止重定向。#vim/etc/sysctl.confnet.ipv4.ip_forward=1net.ipv4.conf.all.accept_redirects=0net.ipv4.conf.all.send_redirects=0重新载入/etc/sysctl.conf:#sysctl-pus在防火墙中打开必要的端口。确保规则不与现有防火墙规则冲突很重要。#iptables-AINPUT-pudp--dport500-jACCEPT#iptables-AINPUT-ptcp--dport4500-jACCEPT#iptables-AINPUT-pudp--dport4500-jACCEPT最后,我们为NAT创建防火墙规则。#iptables-tnat-APOSTROUTING-ssite-A-private-subnet-dsite-B-private-subnet-jSNAT--tosite-A-Public-IP确保您的防火墙规则是持久的。注意:?您可以使用MASQUERADE而不是SNAT。从逻辑上讲它应该可以工作,但它在过去曾导致我的虚拟专用服务器(VPS)出现问题。所以,如果我是你,就会使用SNAT。?如果您还管理站点B,请在站点B服务器上创建类似的规则。?直接路由不需要SNAT。准备配置文件我们要处理的第一个配置文件是ipsec.conf。无论您配置哪个服务器,始终将您的站点视为“左”,将远程站点视为“右”。以下配置均在站点A的VPN服务器上进行。#vim/etc/ipsec.conf##基本配置参数##configsetupplutodebug=allplutostderrlog=/var/log/pluto.logprotostack=netkeynat_traversal=yesvirtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/16##在RedHat中禁用随机加密## oe=off##在Debian中禁用随机加密####注意:这是一个单独的声明语句## include/etc/ipsec.d/examples/no_oe.conf##RedHat中的连接定义##  conndemo-connection-redhatauthby=secretauto=startike=3des-md5##第一阶段##keyexchange=ike##Phase2##phase2=espphase2alg=3des-md5compress=nopfs=yestype=tunnelleft=leftsourceip=leftsubnet=/netmask##for直接路由##leftsubnet=/32leftnexthop=%defaultrouteright=rightsubnet=/netmask##conndemo-connection中的##Debian连接定义-debianauthby=secretauto=start##第一阶段##keyexchange=ike##第二阶段##esp=3des-md5pfs=yestype=tunnelleft=leftsourceip=leftsubnet=/32leftnexthop=%defaultrouteright=rightsubnet=/netmask可以通过几个进行身份验证的不同方法本教程将探索预共享密钥的使用,这些密钥被添加到文件/etc/ipsec.secrets中。#vim/etc/ipsec.secretssiteA-public-IPsiteB-public-IP:PSK"预共享密钥"##incaseofmultiplesites##siteA-public-IPsiteC-public-IP:PSK"对应的预共享密钥“启动服务和故障排除服务器现在应该准备好建立站点到站点的VPN隧道。如果您还管理站点B,请确保您已经为站点B服务器配置了必要的参数。在基于RedHat的系统上,确保使用chkconfig命令将服务添加到启动项。#/etc/init.d/ipseccrestart如果两端的服务器都没有错误,现在应该建立隧道。考虑到以下因素,可以使用ping命令来测试隧道。1.站点B的私有子网不应从站点A访问;也就是说,如果未建立隧道,则ping应该不起作用。2.隧道建立后,尝试从SiteApingSiteB私有子网。这应该工作。此外,到目标私有子网的路由应该出现在服务器的路由表中。#iproute[siteB-private-subnet]via[siteA-gateway]deveth0src[siteA-public-IP]defaultvia[siteA-gateway]deveth0此外,我们可以使用以下有用的命令来检查隧道的状态。#serviceipsecstatusIPsecrunning-plutopid:20754plutopid207541tunnelsupsomeeroutesexist#ipsecauto--status##output截断##000"demo-connection-debian":myip=;hisip=unset;000"demo-connection-debian":ike_life:3600s;ipsec_l??ife:28800s;rekey_margin:540s;rekey_fuzz:100%;keyingtries:0;nat_keepalive:yes000"demo-connection-debian":policy:PSK+ENCRYPT+TUNNEL+PFS+UP+IKEv2ALLOW+SAREFTRACK+lKOD+rKOD;prio:32,28;interface:eth0;##输出被截断##000#184:"demo-connection-debian":500STATE_QUICK_R2(IPsecSAestablished);EVENT_SA_REPLACEin1653s;最新的IPSEC;erouteowner;isakmp#183;idle;import:notset##Outputistruncated##000#183:"demo-connection-debian":500STATE_MAIN_I4(ISAKMPSAestablished);EVENT_SA_REPLACEin1093s;newestISAKMP;lastdpd=-1s(seqin:0out:0);idle;import:notset日志文件/var/log/pluto.log还应该包含有关身份验证、密钥交换和不同阶段的信息的有用信息隧道。如果您的隧道没有出现,您还应该检查日志文件。.如果您确定所有配置都正确,如果您的隧道仍然没有出现,您应该检查以下内容。1.许多Internet服务提供商(ISP)过滤IPsec端口。确保您的ISP允许UDP端口500和TCP/UDP端口4500。您可以尝试通过telnet从远程位置连接到服务器的IPsec端口。2.确保服务器防火墙允许必要的端口。3.确保两端服务器中的预共享密钥完全一致。4、两端服务器配置好左右参数。5.如果您遇到NAT问题,请尝试使用SNAT而不是MASQUERADING。总之,本教程重点介绍在Linux中使用Openswan设置站点到站点IPSecVPN隧道的过程。VPN隧道在增强安全性方面非常有用,因为它们允许管理员仅通过隧道访问关键资源。此外,VPN隧道确保传输中的数据安全可靠,不会被窃听或拦截。希望本文有所帮助。欢迎交流。英文原文:http://xmodulo.com/2014/08/create-site-to-site-ipsec-vpn-tunnel-openswan-linux.html