VPN 多站点路由

VPN 多站点路由

我目前正在设置多站点(3 个站点)VPN。

以下是一张速绘:

在此处输入图片描述

到目前为止,设置一切正常,工作正常。ping 10.10.20.1 <-> 10.10.10.1 以及 10.10.30.1 <-> 10.10.10.1 均正常。

现在我想弄清楚如何从 10.10.20.1 连接到 10.10.30.1。

我想我需要用它iptables来做这个,对吗?

如果有人能解释哪些步骤是必要的以及为什么会这样,那将对我有很大帮助!

答案1

不要使用 NAT。NAT 是一种应该尽可能避免的临时解决方案。它破坏了作为 TCP/IP 基础的端到端原则。

使用静态路由时,您需要将它们指向隧道。如果路由器交换路由信息(OSPF,...),则路由应该会自动启动。要启动隧道,可能需要静态路由(动态路由仅在隧道启动后更新)。

答案2

我找到了答案。以下是我的快速解决方案:

长(不完全)解决方案

在底部服务器上:

iptables -A FORWARD -s 10.10.30.0/24 -d 10.10.20.0/24 -i enp2s0 -m policy --dir in --pol ipsec --reqid 2 --proto esp -j ACCEPT
iptables -A FORWARD -s 10.10.20.0/24 -d 10.10.30.0/24 -o enp2s0 -m policy --dir out --pol ipsec --reqid 2 --proto esp -j ACCEPT
iptables -A FORWARD -s 10.10.20.0/24 -d 10.10.30.0/24 -i enp2s0 -m policy --dir in --pol ipsec --reqid 1 --proto esp -j ACCEPT
iptables -A FORWARD -s 10.10.30.0/24 -d 10.10.20.0/24 -o enp2s0 -m policy --dir out --pol ipsec --reqid 1 --proto esp -j ACCEPT

在左上角的服务器上:

ip route add 10.10.30.0/24 via 138.x.x.1 dev eth0 proto static src 10.10.20.1 table 220
iptables -A FORWARD -s 10.10.30.0/24 -d 10.10.20.0/24 -i eth0 -m . policy --dir in --pol ipsec --reqid 2 --proto esp -j ACCEPT
iptables -A FORWARD -s 10.10.20.0/24 -d 10.10.30.0/24 -o eth0 -m policy --dir out --pol ipsec --reqid 2 --proto esp -j ACCEPT

在右上角的服务器上:

ip route add 10.10.20.0/24 via 108.x.x.1 dev eth0 proto static src 10.10.30.1 table 220
iptables -A FORWARD -s 10.10.20.0/24 -d 10.10.30.0/24 -i eth0 -m policy --dir in --pol ipsec --reqid 2 --proto esp -j ACCEPT
iptables -A FORWARD -s 10.10.30.0/24 -d 10.10.20.0/24 -o eth0 -m policy --dir out --pol ipsec --reqid 2 --proto esp -j ACCEPT

尽管它确实在路由方面起作用,但 strongswan 却禁止连接,正如 tcpdump 所显示的那样。

[bottom]$ tcpdump -nni enp2s0 icmp
15:35:22.512437 IP 109.x.x.x > 85.x.x.x: ICMP host 109.x.x.x unreachable - admin prohibited, length 48

快速解决方案

这个解决方案非常巧妙,因为 strongswan/ipsec 为您管理所有 iptable 和静态路由,并且还允许访问指定的子网。

在底部服务器上:

# /etc/ipsec.conf
conn top-left-to-bottom
    ...
    leftsubnet=10.10.10.0/24,10.10.30.0/24
    ...

conn top-right-to-bottom
    ...
    leftsubnet=10.10.10.0/24,10.10.20.0/24
    ...

在左上角的服务器上:

# /etc/ipsec.conf
conn top-left-to-bottom
    ...
    rightsubnet=10.10.10.0/24,10.10.30.0/24
    ...

在右上角的服务器上:

# /etc/ipsec.conf
conn top-right-to-bottom
    ...
    rightsubnet=10.10.10.0/24,10.10.20.0/24
    ...

成功的 tcpdumped ping 看起来应该是这样的:

[bottom]$ tcpdump -nni enp2s0 icmp
15:52:37.160859 IP 10.10.20.1 > 10.10.30.1: ICMP echo request, id 1296, seq 1, length 64
15:52:37.164971 IP 10.10.30.1 > 10.10.20.1: ICMP echo reply, id 1296, seq 1, length 64

相关内容