我在使用 IPtables 進行 NAT 後的 TFTP 下載時遇到一些問題,我真的需要您的幫助。我熟悉網路原理,但對 IPtables 還很陌生,所以如果我做錯了什麼,我很抱歉。
我有一台運行 Ubuntu 20.04 的伺服器,有兩個網卡,並嘗試連接到 TFTP 伺服器。雖然其他一切都運作得很好,但我在嘗試 TFTP 時遇到超時。我有一個基於 tcpdump 的懷疑,我在其中看到一些 icmp 流量(也許)沒有正確翻譯,但我不確定..
拓樸資訊
TFTP server: 130.221.69.14:udp\69
MyServer (TFTP-CLIENT) :
eth0 = uplink / 172.25.17.6
eth1 = downlink / 10.14.254.0/24 (Which NAT's to eth0 with config below)
IFACE_WAN=eth0
IFACE_LAN=eth1
NETWORK_LAN=10.14.254.0/24
... iptables 配置
echo "1" > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o $IFACE_WAN -s $NETWORK_LAN ! -d $NETWORK_LAN -j MASQUERADE
iptables -A FORWARD -d $NETWORK_LAN -i $IFACE_WAN -o $IFACE_LAN -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -s $NETWORK_LAN -i $IFACE_LAN -j ACCEPT
在 eth1/$NETWORK_LAN(NAT 之前)上執行 tcpdump 時,我看到:
我在這裡沒有看到 ICMP 流量。
root@swmgmt:~# tcpdump -i eth1 -n dst 130.221.69.14
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture size 262144 bytes
20:38:34.901901 IP 10.14.254.164.59384 > 130.221.69.14.69: 38 RRQ "switch-config/by-name/switch1" octet
20:38:38.897841 IP 10.14.254.164.59384 > 130.221.69.14.69: 38 RRQ "switch-config/by- name/switch1" octet
20:38:43.899754 IP 10.14.254.164.59384 > 130.221.69.14.69: 38 RRQ "switch-config/by-name/switch1" octet
20:38:49.903083 IP 10.14.254.164.59384 > 130.221.69.14.69: 38 RRQ "switch-config/by-name/switch1" octet
20:38:56.907874 IP 10.14.254.164.59384 > 130.221.69.14.69: 38 RRQ "switch-config/by-name/switch1" octet
20:39:04.908915 IP 10.14.254.164.59384 > 130.221.69.14.69: 38 RRQ "switch-config/by-name/switch1" octet
20:39:12.909728 IP 10.14.254.164.59384 > 130.221.69.14.69: 23 ERROR EUNDEF "Session terminated"
在 eth0/$NETWORK_WAN(NAT 之後)上執行 tcpdump 時,我看到:
我在這裡看到 icmp 流量?
20:21:31.898048 IP 172.25.17.6.59650 > 130.221.69.14.69: 38 RRQ "switch-config/by-name/switch1" octet
20:21:31.899090 IP 172.25.17.6 > 130.221.69.14: ICMP 172.25.17.6 udp port 59650 unreachable, length 55
20:21:39.024682 IP 172.25.17.6.59650 > 130.221.69.14.69: 38 RRQ "switch-config/by-name/switch1" octet
20:21:39.025524 IP 172.25.17.6 > 130.221.69.14: ICMP 172.25.17.6 udp port 59650 unreachable, length 55
20:21:47.029243 IP 172.25.17.6.59650 > 130.221.69.14.69: 38 RRQ "switch-config/by-name/switch1" octet
20:21:47.030220 IP 172.25.17.6 > 130.221.69.14: ICMP 172.25.17.6 udp port 59650 unreachable, length 55
20:21:55.030448 IP 172.25.17.6.59650 > 130.221.69.14.69: 23 ERROR EUNDEF "Session terminated"
任何幫助都會非常感謝!
真誠的托爾。
答案1
您可能需要載入 tftp NAT 幫助程序,因為 tftp 是與 NAT 無法很好地配合的協定之一。
嘗試modprobe nf_nat_tftp
。
注意:以上資訊來自使用 nftables 的系統,而不是 iptables。你的旅費可能會改變。無論如何,請嘗試在目錄下找到它,可能是在頂層的/lib/modules/<kernel-version>/kernel/net/
子目錄中或在 ipv4 或 ipv6 目錄下。netfilter