简短版本:在两侧均使用 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 会收到该信息。
两个服务器都需要做相应的修改。
谢谢。