Iptables
如何使用匹配特定模式的 iptables 重定向數據包?(例如,帶有 UDP 的 QUERY 命令)
我有一個特定的數據包,我希望始終將其重定向到我的虛擬網路介面上的特定 IP。至於現在我的 iptables 是這樣設置的:
(命令,我現在使用 \ 使其更具可讀性,讀作“將下一行組合到這一行”:))對於允許的 IP:
iptables \ -t nat -A PREROUTING \ -i vmbr0 -p udp --dport 7777 \ -m set --match-set whitelist \ -j DNAT --to 192.168.0.1:7777
對於不允許的 IP:
iptables \ -t nat -A PREROUTING \ -i vmbr0 -p udp --dport 7777 \ -m set ! --match-set whitelist \ -j DNAT --to 192.168.0.1:7778
但是,無論白名單條目如何,我都想傳遞某個 udp 數據包(匹配一些十六進制,如果可能,最好使用萬用字元),我
192.168.0.1:7777
該怎麼做?所以最終這將是結果:
得到我!:-) 我錯了。我想到的(
-m string
匹配擴展)是不可能的,我們在 nat 表中,只有“連接”的第一個數據包(即使是 udp)會通過這個表。所以我們不能檢查相同連接的所有數據包並只偏離一個。您可以檢查匹配副檔名
string
(-m string
)。另請注意,DNAT 目標正在終止,這意味著如果數據包與 DNAT 目標匹配規則,則數據包將不會通過以下規則。
所以你可以選擇這種解決方案:
在您的 nat 表中:
第一條規則:你提到的第一條規則,匹配白名單
在這條規則之後仍然流過的包是不匹配白名單的包(更準確地說是埠 7777 的不匹配白名單的 UDP 包)。
第二條規則:在這裡你可以使用 -m 字元串。請注意,檢查數據包中的字元串可能會佔用大量資源。您可以匹配十六進製字元串(
--hex-string
選項),但我不知道此匹配擴展中的萬用字元。第三條規則:可以簡化,因為終止目標 DNAT
希望這可以幫助。