답변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 핑은 다음과 같습니다.
[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