IPtables を使用した NAT の背後での TFTP ダウンロードで問題があり、皆さんの助けが本当に必要です。ネットワークの原理はよく知っていますが、IPtables についてはほとんど初心者なので、何か完全に間違っている場合は申し訳ありません。
2 つの NIC を備えた 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"
どのような助けでも大歓迎です!
よろしくお願いいたします、Tor。
答え1
tftp は NAT とうまく連携しないプロトコルの 1 つなので、おそらく tftp NAT ヘルパーをロードする必要があります。
試すmodprobe nf_nat_tftp
。
注: 上記の情報は、iptables ではなく nftables を使用するシステムからのものです。状況は異なる場合があります。いずれにしても、/lib/modules/<kernel-version>/kernel/net/
ディレクトリの下、おそらく最上位レベルのサブディレクトリnetfilter
、または ipv4 または ipv6 ディレクトリの下を探してみてください。