答え1
NAT を使用しないでください。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
ルーティングに関しては機能しますが、tcpdump で明らかになったように、strongswan は接続を禁止しています。
[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