어떤 이유로 내 NAT는 로컬 네트워크에서만 연결을 허용합니다. 로컬 네트워크에 ping을 실행하면 NAT 게이트웨이를 소스로 사용하여 패킷이 전송됩니다. 원격 네트워크(인터넷 호스트 등)에 ping을 실행하면 패킷 소스가 장치의 내부 IP 주소이고 응답이 올바르게 전송되지 않습니다. 무엇이 잘못 구성되었을 수 있는지에 대한 아이디어가 있습니까?
router ~ # iptables -S
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -i eth2 -j ACCEPT
-A INPUT -i eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 3306 -j ACCEPT
router ~ # iptables -S -t nat
-P PREROUTING ACCEPT
-P INPUT ACCEPT
-P OUTPUT ACCEPT
-P POSTROUTING ACCEPT
-A POSTROUTING -o eth0 -j MASQUERADE
내부 네트워크는 192.168.0.0/16이고 외부 네트워크(NAT 로컬)는 10.72.16.0/22입니다.
AB에 대한 정보가 업데이트되었습니다.
router ~ # ip -br link; ip -4 -br addr; ip route; ip rule
lo UNKNOWN 00:00:00:00:00:00 <LOOPBACK,UP,LOWER_UP>
eth0 UP 00:15:5d:e8:47:39 <BROADCAST,MULTICAST,UP,LOWER_UP>
eth1 UP 00:15:5d:e8:47:3a <BROADCAST,MULTICAST,UP,LOWER_UP>
eth2 UP 00:15:5d:e8:47:46 <BROADCAST,MULTICAST,UP,LOWER_UP>
sit0@NONE DOWN 0.0.0.0 <NOARP>
lo UNKNOWN 127.0.0.1/8
eth0 UP 10.72.16.140/22
eth1 UP 10.72.21.14/22
eth2 UP 192.168.0.1/16
default via 10.72.20.1 dev eth1
default via 10.72.16.1 dev eth0
10.72.16.0/22 dev eth0 proto kernel scope link src 10.72.16.140
10.72.20.0/22 dev eth1 proto kernel scope link src 10.72.21.14
192.168.0.0/16 dev eth2 proto kernel scope link src 192.168.0.1
0: from all lookup local
32766: from all lookup main
32767: from all lookup default
내부 호스트와 동일:
int_host ~ # ip -br link; ip -4 -br addr; ip route; ip rule
lo UNKNOWN 00:00:00:00:00:00 <LOOPBACK,UP,LOWER_UP>
eth0 UP 52:69:6e:00:81:95 <BROADCAST,MULTICAST,UP,LOWER_UP>
usb0 DOWN 52:69:6e:00:00:00 <NO- CARRIER,BROADCAST,MULTICAST,UP>
lo UNKNOWN 127.0.0.1/8
eth0 UP 192.168.0.5/16
usb0 DOWN 192.168.127.5/24 169.254.0.1/16
default via 192.168.0.1 dev eth0
169.254.0.0/16 dev usb0 proto kernel scope link src 169.254.0.1 linkdown
192.168.0.0/16 dev eth0 proto kernel scope link src 192.168.0.5
192.168.127.0/24 dev usb0 proto kernel scope link src 192.168.127.5 linkdown
RTNETLINK answers: Address family not supported by protocol
Dump terminated
내부 호스트에서 외부(로컬) 호스트로 ping:
int_host ~ # ping 10.72.16.50
PING 10.72.16.50 (10.72.16.50) 56(84) bytes of data.
64 bytes from 10.72.16.50: icmp_seq=1 ttl=127 time=1.37 ms
^C
내부 호스트에서 외부 호스트로 ping을 수행합니다.
int_host ~ # ping 172.18.221.227
PING 172.18.221.227 (172.18.221.227) 56(84) bytes of data.
^C
--- 172.18.221.227 ping statistics ---
8 packets transmitted, 0 received, 100% packet loss, time 7243ms
Wireshark는 핑의 소스가 내부 호스트의 내부 IP 주소임을 보여줍니다.
4842 60.182197 192.168.0.5 172.18.221.227 ICMP 98 Echo (ping) request id=0x567d, seq=7/1792, ttl=62 (reply in 4843)
4843 60.182365 172.18.221.227 192.168.0.5 ICMP 98 Echo (ping) reply id=0x567d, seq=7/1792, ttl=128 (request in 4842)
예상한 대로 응답은 10.72.16.140의 라우터 대신 존재하지 않는 192.168.0.5 호스트로 전송되기 때문에 다시 전송되지 않습니다(이후 내부 192.168.0.5 주소로 전송됨).
답변1
경로는 순차적으로 적용됩니다. 따라서 기본 경로(및 주어진 예 ) 는 라우팅 테이블의 첫 번째 경로이므로 172.18.221.227
통과됩니다 . 패킷 전달에는 eth1
유일한 규칙이 적용됩니다 . OP가 언급했듯이 경로를 변경할 수 없습니다. 따라서 을 통과하는 패킷은 변경되지 않으며 원래 RFC1918 IP가 유지됩니다.MASQUERADE
eth0
POSTROUTING
eth1
따라서 규칙을 변경하여 문제를 해결할 수도 MASQUERADE
있습니다 eth1
.
INPUT
정책이 (다시?) 로 설정된 경우 DROP
복사 도 고려해야 합니다 state
.ESTABLISHED
eth1