다음과 같은 네트워크 설정이 있습니다.
게이트웨이:
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.1
Cloudflare의 VIP로 리디렉션됩니다.1.1.1.1
사용자가 VIP를 핑하면 10.8.8.8
Google로 리디렉션됩니다.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가 자동으로 수행됩니다.)