NAT를 통한 가상 게이트웨이

NAT를 통한 가상 게이트웨이

다음과 같은 네트워크 설정이 있습니다.

게이트웨이:

Internet <-- eth0 : a.b.c.d (static address)
Clients <-- eth1  : DHCP at server at 172.16.0.1, leasing 172.16.0.0/24

고객:

Gateway <-- eth0: 172.16.0.0/24

클라이언트가 인터넷에 액세스할 수 있으며 전달이 정상입니다. 클라이언트가 게이트웨이를 통해 액세스할 수 있지만 실제로는 인터넷상의 일부 기계인 일종의 "가상" 주소를 만들고 싶습니다.

따라서 연결하면 172.32.1.1실제로 Google 등에 연결됩니다. NAT를 사용해 보았습니다.

TARGET=$(dig -q google.com)
VIRTUAL=172.32.1.1
iptables -t nat -A PREROUTING -d "$VIRTUAL" -j DNAT --to "$TARGET"
iptables -t nat -A POSTROUTING -s "$TARGET" -j SNAT --to "$VIRTUAL"

이 접근 방식은 작동하지만 게이트웨이에서 ping을 실행하면 다음과 같은 메시지가 표시됩니다.

From 20.249.x.y icmp_seq=1 Destination Net Unreachable

(여기서 20.249.xy는 내 게이트웨이의 게이트웨이입니다.) 클라이언트에서 해당 가상 IP를 추적하면 다음을 얻습니다.

traceroute to 172.32.1.1 (172.32.1.1), 30 hops max, 38 byte packets
 1  172.32.1.1 (172.32.1.1)  31.886 ms  31.638 ms  34.029 ms
 2  172.32.1.1 (172.32.1.1)  39.660 ms  40.489 ms  39.153 ms
 3  172.32.1.1 (172.32.1.1)  41.879 ms  40.367 ms  40.436 ms
 4  172.32.1.1 (172.32.1.1)  47.375 ms  48.200 ms  48.878 ms
 5  172.32.1.1 (172.32.1.1)  47.801 ms  47.280 ms  47.405 ms

이것은 나에게 매우 이상해 보입니다. 이러한 문제를 해결할 수 있는 방법이 있나요? 을 사용해 보았지만 ip tunnel다른 엔드포인트 설정도 필요한 것 같은데 분명히 할 수 없습니다.

서버의 iptables 구성에는 -A FORWARD -i eth1 -j ACCEPT이 두 가지 규칙만 포함되어 있습니다.

답변1

기존의 손상된 iptables 규칙을 새로 고치고 처음부터 시작할 수 있습니다. 게이트웨이 역할을 하는 Linux 시스템에서 다음을 가정합니다.

Linux 게이트웨이에는 두 개의 네트워크 카드가 있습니다. eth0은 LAN을 향하고 eth1은 WAN을 향합니다.

게이트웨이에서 IP 패킷 전달을 활성화합니다.

$ sudo echo 1 > /proc/sys/net/ipv4/ip_forward

테스트 계획에 따라 eth0에 두 개의 테스트 VIP(가상 IP)를 생성합니다.

$ sudo ifconfig eth0:1 10.1.1.1 netmask 255.255.255.0
$ sudo ifconfig eth0:2 10.8.8.8 netmask 255.255.255.0

우리 계획에 따라 iptables 구성

sudo iptables -t nat -A PREROUTING -d 10.1.1.1 -j DNAT --to 1.1.1.1
sudo iptables -t nat -A PREROUTING -d 10.8.8.8 -j DNAT --to 8.8.8.8
sudo iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE

이 경우 사용자가 VIP를 ping하면 10.1.1.1Cloudflare의 VIP로 리디렉션됩니다.1.1.1.1

사용자가 VIP를 핑하면 10.8.8.8Google로 리디렉션됩니다.8.8.8.8

10.1.1.1 ---> 1.1.1.1
10.8.8.8 ---> 8.8.8.8

답변2

NAT [...]를 사용해 보았는데 어떻게든 작동하지만 게이트웨이에서 ping을 하면 [Network Unreachable]이라는 메시지가 나타납니다.

이름에서 알 수 있듯이 PREROUTING 및 POSTROUTING 체인은 게이트웨이로 들어가 외부로 라우팅되는 패킷에만 사용됩니다.

이는 특히 수행 중인 핑과 같이 게이트웨이에서 발생하는 패킷에는 적용되지 않음을 의미합니다. 이 문제를 해결할 방법이 없습니다. 필터 체인이 이렇게 이상해 보입니다. 그러나 사용 사례에는 클라이언트의 NAT만 필요하므로 실제로는 중요하지 않습니다.

(그런데 DNAT만 필요합니다. 이렇게 하면 CONNTRACK 항목이 생성되고 역방향 NAT가 자동으로 수행됩니다.)

관련 정보