echo "200 rj45" >> /etc/iproute2/rt_tables
echo "201 WIFI" >> /etc/iproute2/rt_tables
ip route add default via 192.168.5.9 dev eth0
ip rule add from 192.168.5.8/24 table rj45
ip rule add from 192.168.61.128/24 table WIFI
ip route add default via 192.168.5.9 dev eth0 table rj45
ip route add default via 192.168.61.38 dev wlan0 table WIFI
iptables -t nat -A POSTROUTING -s 10.196.0.0/16 -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 10.196.0.0/16 -o wlan0 -j MASQUERADE
ip route flush cache
안녕하세요. 위의 명령은 Linux Server 1이 시작될 때 입력되었습니다.
존재하다리눅스 서버 1, 가지다3개의 인터페이스. 2개의 인터페이스예핏기 없는상호 작용,이더넷 0그리고192.168.5.8/24지적 재산과무선랜 0 192.168.61.128/24 사용지적 재산권. 또 다른 인터페이스는근거리 통신망그리고10.196.3.254/16지적 재산권.
Linux 서버 1 eth0이 다음에 연결됩니다.리눅스 서버 2 eth0그리고192.168.5.9/24지적 재산권.
위의 정책 라우팅 명령은 Linux 정책 라우팅을 위해 구현되었습니다. 기본 경로는 rj45이지만 경우에 따라 기본 경로가 WIFI로 변경됩니다.
다음 NAT iptables 명령이 적용되지 않을 때, 특히 다음 명령을 사용할 때 문제가 있습니다.192.168.5.8/24 테이블 rj45에서 IP 규칙 추가. 언제. . . 언제클라이언트 IP 10.196.3.253/16 ping 192.168.5.9, 이는 Linux Server 1 eth0의 서브넷입니다. 10.196.3.253이 Linux 서버 2 별칭 IP인 192.168.3.9를 ping하면 성공적으로 ping할 수 있습니다.
Linux 서버 2의 tcpdump -i eth0 icmp는 10.196.3.253의 icmp ping에 응답하려고 시도함을 보여줍니다. 이는 ICMP ping이 NAT가 아닐 가능성이 높음을 의미합니다. 아래는 출력입니다
12:31:14.519000 IP 192.168.5.8 > 192.168.5.9: ICMP echo request, id 4213, seq 155, length 64
12:31:14.519018 IP 192.168.5.9 > 192.168.5.8: ICMP echo reply, id 4213, seq 155, length 64
12:31:14.520018 IP 192.168.5.9 > 10.196.3.253: ICMP echo reply, id 4213, seq 155, length 64
이 설정에서 NAT가 작동하지 않는 이유를 아시나요? 명확성을 위해 아래는 네트워크 다이어그램입니다.
답변1
접두사 길이가 있기 때문에 /24
(대신 /32
또는 생략됨) IP 규칙은 주소 대신 서브넷 ID와 일치합니다.
접두사 길이는 /24
인터페이스에서 IP를 구성하는 경우에만 적절하고 필수이며, 이 경우 서브넷 마스크/크기를 나타내는 데 사용됩니다. 다른 경우에는 실제로 서브넷과 일치시키려는 경우가 아니면 이를 포함해서는 안 됩니다(이 경우 올바른 주소(예: 192.168.5.0
for ) 도 사용해야 함 /24
).
서브넷 ID로서 완전히 유효하거나 의미가 있는 것은 아니지만 규칙에 의해 재정의 192.168.5.8/24
될 수 있습니다 . 따라서 "역방향 DNAT" 응답은 라우팅/전달되는 대신 192.168.5.9
서버 1의 경로를 통해 192.168.5.9
다시 자신에게 라우팅/전달됩니다 .default
rj45
10.196.3.253