站点到站点 VPN 通过 VPN 隧道路由流量

站点到站点 VPN 通过 VPN 隧道路由流量

简短版本:在两侧均使用 Strongswan 的站点到站点 VPN 设置中,如何通过 VPN 隧道路由特定流量?

长版本:

我们在AWS中有两台Linux(ubuntu 20.04),都安装了Strongswan VPN,并且建立了VPN隧道。

IP 172.31.0.151                      IP 10.0.0.14 
Server 1        <===VPN tunnel===>   Server 2

正如预期的那样,他们可以互相 ping 通,tcpdump 将显示 ping 的正确私有 IP 地址。

服务器 2 的 /etc/ipsec.conf 内容(服务器 1 的 ipsec.conf 几乎相同,只是交换了左右值):

# basic configuration
config setup
# Add connections here.
conn %default
 ikelifetime=28800s
 lifetime=3600s
#rekeymargin= You choose; must match other side
 keyingtries=%forever
 keyexchange=ikev2
 authby=secret
 mobike=no


conn vpn-test
# private ip
 left=10.0.0.14

# vpc cidr
 leftsubnet=10.0.0.0/24

# elastic ip
 leftid=18.999.999.999

# private ip
 leftsourceip=10.0.0.14

# public/elastic ip
 right=18.888.888.888

# subnet/VPC cidr
 rightsubnet=172.31.0.0/16,2.2.2.2/32

 auto=start
 type=tunnel
 ike=aes256-sha1-modp1024!
 esp=aes256-sha1!
 dpddelay=30s
 dpdtimeout=120s
 dpdaction=restart
# Add connections here.

目标:如果我们需要从服务器 2 访问服务器 1 网络中的“虚拟” IP 地址,例如,我们希望 ping 2.2.2.2 并通过 VPN 隧道发送 ping 请求,而不是离开服务器 2 的实际网络接口并进入互联网。

两个配置中的左/右子网分别为 2.2.2.2/32,但仍然不起作用。

我们尝试的方法1:ip route add

Strongswan 没有创建 VPN 网络接口,ip a命令给出了 Ubuntu 中的两个默认网络接口:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
   link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
   inet 127.0.0.1/8 scope host lo
      valid_lft forever preferred_lft forever
   inet6 ::1/128 scope host
      valid_lft forever preferred_lft forever
2: ens5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc mq state UP group default qlen 1000
    link/ether 0e:ac:45:e9:76:60 brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.14/28 brd 10.0.0.15 scope global dynamic ens5
       valid_lft 3576sec preferred_lft 3576sec
    inet6 fe80::cac:45ff:fee9:7660/64 scope link
       valid_lft forever preferred_lft forever

因此,使用ip route add命令来路由流量在这里不起作用。

方法 2:iptables

我们尝试的另一种方法是使用 iptables 进行 DNAT,当目的地是 2.2.2.2 时,将其路由到服务器 1 的 IP 地址 172.31.0.151,但是 DNAT 会改变目的地,因此在服务器 1 上我们将观察到目的地为 172.31.0.151 而不是 2.2.2.2 的数据包,并且无法对其进行相应的 NAT。所以 iptables 也不能解决这个问题。

作为这个领域的新手,我不知道应该在 Strongswan 配置、Linux 路由还是其他方面。我们该如何解决这个问题?

感谢您的时间。

答案1

为了回答我自己的问题,当我替换此行时

 rightsubnet=172.31.0.0/16,2.2.2.2/32

 rightsubnet=2.2.2.2

成功了。从服务器 2,我可以 ping 2.2.2.2,并且服务器 1 会收到该信息。

两个服务器都需要做相应的修改。

谢谢。

相关内容