eth0과 eth1이라는 두 개의 인터페이스가 있습니다.
내 응용 프로그램이 eth1에서 실행 중입니다.
eth0(10.43.16.249)에서 들어오는 패킷은 다음 명령을 사용하여 eth1(10.43.18.110)로 사전 라우팅됩니다.
iptables -t nat -p udp -A PREROUTING -d 10.43.16.249 -j DNAT --to-destination 10.43.18.110
들어오는 패킷
10:34:06.373083 IP 10.43.18.124.67 > 10.43.16.249.67: BOOTP/DHCP, Request from 00:a0:bc:00:00:02, length 259
이상한 점은 내 애플리케이션의 응답이 eth0의 소스 IP(10.43.16.249)로 전송되는 것으로 표시되어 클라이언트를 통해 클라이언트로 가는 경로가 없기 때문에 응답 패킷이 클라이언트 IP(10.43.18.124)에 도달할 수 없다는 것입니다. eth0.
나가는 패킷
10:34:06.375043 IP 10.43.16.249.67 > 10.43.18.124.67: BOOTP/DHCP, Reply, length 300
eth0 패킷을 eth1을 통해 라우팅할 수 있는 방법이 있습니까?
라우팅 테이블
# netstat -r
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
default gateway 0.0.0.0 UG 0 0 0 eth0
10.43.16.128 0.0.0.0 255.255.255.128 U 0 0 0 eth0
10.43.18.64 0.0.0.0 255.255.255.192 U 0 0 0 eth1
POSTROUTING SNAT를 시도했지만 라우팅 규칙을 살펴본 후 POSTROUTING이 발생하기 때문에 작동하지 않는 것 같습니다(eth0의 경로가 없음).
(eth1) 요청을 처리하기 위해 중간에 Keepalived NAT 로드 밸런서가 있기 때문에 요청이 서버의 eth0에 도달할 수 있습니다.