Nat
NFTables 偽裝不工作
我正在嘗試設置 NFTables 以將來自特定 UDP 埠的流量轉發到具有不同 IP 地址的另一台伺服器。但是,我的偽裝規則似乎不起作用。當我向這個特定的 UDP 埠發送數據包時,它會嘗試轉發流量,但不會將源 IP 更改為轉發伺服器的 IP 地址。據我了解,這應該與偽裝規則一起發生。但是,即使是 SNAT 規則也不起作用。
這是顯示問題所在的 TCPDump 輸出:
01:04:12.437619 fe:00:02:b8:34:ff > 56:00:02:b8:34:ff, ethertype IPv4 (0x0800), length 51: <MyIP>.7130 > <ForwardIP>.27015: UDP, length 9 01:04:12.437657 56:00:02:b8:34:ff > fe:00:02:b8:34:ff, ethertype IPv4 (0x0800), length 51: <MyIP>.7130 > <DestIP>.27015: UDP, length 9 01:04:14.145003 fe:00:02:b8:34:ff > 56:00:02:b8:34:ff, ethertype IPv4 (0x0800), length 51: <MyIP>.7130 > <ForwardIP>.27015: UDP, length 9 01:04:14.145051 56:00:02:b8:34:ff > fe:00:02:b8:34:ff, ethertype IPv4 (0x0800), length 51: <MyIP>.7130 > <DestIP>.27015: UDP, length 9
我希望它看起來像這樣:
01:04:12.437619 fe:00:02:b8:34:ff > 56:00:02:b8:34:ff, ethertype IPv4 (0x0800), length 51: <MyIP>.7130 > <ForwardIP>.27015: UDP, length 9 01:04:12.437657 56:00:02:b8:34:ff > fe:00:02:b8:34:ff, ethertype IPv4 (0x0800), length 51: <ForwardIP>.7130 > <DestIP>.27015: UDP, length 9 01:04:14.145003 fe:00:02:b8:34:ff > 56:00:02:b8:34:ff, ethertype IPv4 (0x0800), length 51: <MyIP>.7130 > <ForwardIP>.27015: UDP, length 9 01:04:14.145051 56:00:02:b8:34:ff > fe:00:02:b8:34:ff, ethertype IPv4 (0x0800), length 51: <ForwardIP>.7130 > <DestIP>.27015: UDP, length 9
這是我目前的 NFTables 的設置方式:
root@forwardtest:~# nft list tables table ip compressor_forward root@forwardtest:~# nft list table compressor_forward -a table ip compressor_forward { # handle 1 chain prerouting { # handle 15 type nat hook prerouting priority dstnat; policy accept; udp dport 27015 dnat to 149.28.45.245 # handle 17 } chain postrouting { # handle 16 type nat hook postrouting priority srcnat; policy accept; masquerade random # handle 18 } }
我嘗試刪除
random
NAT 標誌以及添加persistent
NAT 標誌。對於我的情況,我確實需要random
NAT 標誌。但是,添加/刪除標誌並沒有什麼不同。還設置了 IPv4 轉發:
root@forwardtest:~# sysctl net.ipv4.ip_forward net.ipv4.ip_forward = 1
IPTables (NAT) 也應該被刪除。以下是我執行的一些命令:
root@forwardtest:~# rmmod iptable_nat rmmod: ERROR: Module iptable_nat is not currently loaded root@forwardtest:~# lsmod | grep "iptable" root@forwardtest:~# lsmod | grep "nft" nft_masq 16384 1 nft_nat 16384 1 nft_chain_nat 16384 2 nf_nat 40960 3 nft_nat,nft_masq,nft_chain_nat nf_conntrack 139264 3 nf_nat,nft_nat,nft_masq nf_tables 135168 8 nft_nat,nft_masq,nft_chain_nat root@forwardtest:~# iptables -t nat -L -n Chain PREROUTING (policy ACCEPT) target prot opt source destination 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 root@forwardtest:~# iptables -L -n Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination
請記住
lsmod | grep "iptable"
什麼都沒退回。我也嘗試過創建postrouting
優先級為 1 的鏈,但這沒有任何區別。轉發伺服器
Ubuntu 20.04 LTS
在核心上執行5.4.0-26-generic
。在這種情況下我有什麼遺漏嗎?話雖如此,我是 NFTables 的新手。因此,如果我遺漏了一些明顯的東西,我深表歉意。
如果您需要更多資訊,請告訴我!
非常感謝任何幫助!
感謝您的時間。
我解決了這個問題。我將轉發伺服器的核心從
5.4.0-26-generic
to升級了5.6.11-050611-generic
,它開始正常工作。話雖如此,我確實嘗試在舊核心上重新啟動轉發伺服器,並且在重新啟動後問題仍然存在。因此,我確實相信核心實際上是這裡的問題。絕對是一個奇怪的問題。我將設置另一個很快執行的測試伺服器
5.4.0-26-generic
來確認。謝謝!