Iptables

iptables udp 埠 已轉發,但 ICMP UDP 埠無法訪問

  • November 11, 2020

我希望在埠 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

引用自:https://serverfault.com/questions/1042209