Iptables
iptables udp 埠 已轉發,但 ICMP UDP 埠無法訪問
我希望在埠 10666 UDP 上託管一個遊戲伺服器(Zandronum Doom),但沒有人可以連接到它。我已經解決了這個問題,我認為這是我的路由問題。我的物理網路架構是這樣的:
[WAN] - [Router] - [Switch] - [Pi] - [Desktop] - [Other]
我的路由如下
[WAN] - [(pub. ip) Router (192.168.1.1)] - [Pi (192.168.1.5)] - [Desktop (192.168.1.11)] - [Other (tv, printer, laptop, phone, etc)]
我的路由器設置為將我想要的任何內容轉發到樹莓派,並且只轉發到那裡。樹莓派設置為 IDS/IPS,還充當我整個網路的 DNS 伺服器和 DHCP 伺服器。我希望我所有的流量都通過那裡。樹莓派通過 dhcp 設置為預設網關,樹莓派本身將路由器作為預設網關。
路由器設置為埠將 10666 埠上的 tcp 和 udp 流量轉發到 pi。這是給我帶來麻煩的交通。樹莓派在iptable中有如下相關規則:
$> sudo iptables --list -t nat Chain PREROUTING (policy ACCEPT) target prot opt source destination DNAT tcp -- fritz.box pi.lan tcp dpt:10666 to:192.168.1.11 DNAT udp -- fritz.box pi.lan udp dpt:10666 to:192.168.1.11 Chain INPUT (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination Chain POSTROUTING (policy ACCEPT) target prot opt source destination MASQUERADE all -- anywhere anywhere $> sudo iptables --list Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination QUEUE all -- anywhere anywhere Chain OUTPUT (policy ACCEPT) target prot opt source destination
我不確定為什麼其中一些名稱已解決,而其他名稱則沒有。
我無法通過公共 IP 連接到伺服器。TCP Dump 顯示以下內容:
$> sudo tcpdump -i eth0 | grep 10666 [...] 21:34:57.456103 IP paul-pc.lan.10667 > <pub-ip>.10666: UDP, length 50 21:34:57.457635 IP pi.lan.10667 > <pub-ip>.10666: UDP, length 50 21:34:57.458130 IP <pub-ip>.10667 > pi.lan.10666: UDP, length 50 21:34:57.458279 IP pi.lan > <pub-ip>: ICMP pi.lan udp port 10666 unreachable, length 86 21:34:57.458451 IP <pub-ip> > pi.lan: ICMP <pub-ip> udp port 10666 unreachable, length 86 21:34:57.458711 IP <pub-ip> > paul-pc.lan: ICMP <pub-ip> udp port 10666 unreachable, length 86 [repeating] [...]
為了進行測試,我更改了伺服器的網路設置以繞過 pi 和路由器直接埠轉發到桌面。然後它完美地工作了。
選項
-s 192.168.1.1
是錯誤的。源是從路由器傳過來的,不是重新打包的(路由器不是源)。使用目標過濾器代替-d 192.168.1.5