Linux

VPN 多站點路由

  • March 18, 2018

我目前正在設置一個多站點(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它來做這個,對嗎?

如果有人可以解釋哪些步驟是必要的,為什麼會對我有很大幫助!

我想到了。這是我漫長而快速的解決方案:

長(不完全)解決方案

在底層伺服器上:

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

儘管它確實有效,但正如 tcpdump 所揭示的那樣,strongswan 正在禁止連接。

[bottom]$ tcpdump -nni enp2s0 icmp
15:35:22.512437 IP 109.x.x.x &gt; 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 &gt; 10.10.30.1: ICMP echo request, id 1296, seq 1, length 64
15:52:37.164971 IP 10.10.30.1 &gt; 10.10.20.1: ICMP echo reply, id 1296, seq 1, length 64

不要NAT。NAT 是一個雜物,應盡可能避免。它打破了作為 TCP/IP 基礎的端到端原則。

使用靜態路由,您需要將它們指向隧道。如果路由器交換路由資訊(OSPF,…),路由應該會自動出現。要啟動隧道,可能需要靜態路由(動態路由僅在隧道啟動後更新)。

引用自:https://serverfault.com/questions/901380