子网到子网 libreswan ipsec vpn

子网到子网 libreswan ipsec vpn

我正在使用 libreswan 在两台 Centos 7 服务器之间配置“子网到子网 VPN”。每台服务器都有两个网卡,如下图所示。

我希望允许子网 172.18.0.0/16 和 172.19.0.0/16 之间进行安全通信,并使用 172.17.0.0/16 网络建立 vpn,但在允许这两个子网之间的流量时遇到问题。

我按照redhat官方文档https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Security_Guide/sec-Securing_Virtual_Private_Networks.html#Site-To-Site_VPN_Using_Libreswan

实际上我在两个节点上都停止了防火墙。

我检查了 ipsec 先决条件:

[root@node2 ~]# ipsec verify
Verifying installed system and configuration files

Version check and ipsec on-path                         [OK]
Libreswan 3.8 (netkey) on 3.10.0-123.el7.x86_64
Checking for IPsec support in kernel                    [OK]
 NETKEY: Testing XFRM related proc values
         ICMP default/send_redirects                    [OK]
         ICMP default/accept_redirects                  [OK]
         XFRM larval drop                               [OK]
Pluto ipsec.conf syntax                                 [OK]
Hardware random device                                  [N/A]
Two or more interfaces found, checking IP forwarding    [OK]
Checking rp_filter                                      [OK]
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 NAT and MASQUERADEing                          [TEST INCOMPLETE]
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.conf内容为:

config setup
    protostack=netkey

conn mytunnel
    leftid=@node1
    left=172.17.0.101
    leftrsasigkey=0sAQPXn...        
    rightid=@node2
    right=172.17.0.102
    rightrsasigkey=0sAQPxv...
    authby=rsasig

conn mysubnet
     also=mytunnel
     leftsubnet=172.18.0.0/16
     rightsubnet=172.19.0.0/16
     auto=start

我在两个节点上启动 ipsec 服务。然后我检查“ipsec status”(此处有输出http://pastebin.com/LYA9uqfJ),我没有发现任何错误。

node1的路由表为:

[root@node1 ~]# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 eno16777736
172.18.0.0      0.0.0.0         255.255.255.0   U     0      0        0 eno33554992

如果尝试从节点 1 ping ip 地址 172.19.0.101,我会收到错误“连接:网络不可达”

我的配置中缺少什么吗?我可以尝试什么来允许这两个子网之间的安全通信?

答案1

检查net.ipv4.ip_forward中的设置sysctl

或者您可以尝试在两端运行 tcpdump,看看会发生什么。

例子:

tcpdump -n -i interface esp or udp port 500 or udp port 4500

还可以尝试添加如下 iptables 规则:

-A FORWARD -i EXTIF -o INIF -j ACCEPT
-A FORWARD -i INIF -o EXTIF -j ACCEPT
-A POSTROUTING -s YOURNET1 ! -d YOURNET2 -j MASQUERADE

关于上述内容的更多细节:

  • EXTIF您的 172.17.0.0/16 接口是

  • INIF是另一个 172.18.0.0 或 172.19.0.0

我使用了 HOWTO,我的网络可以正常工作,但没有发送 keepalive 包。Strongswan 没有遇到问题

答案2

连接:网络不可达

由于只有到172.17.0.0/16和 的路由172.18.0.0/24,因此没有到 的特定路由172.19.0.0/16,也没有覆盖它的默认路由,这就是为什么会出现该错误。

因此,您必须添加到远程子网的特定路由,或者在两台主机上添加默认路由。

顺便说一句,您应该使用ip route而不是 来管理路线route

相关内容