2013-03-14 51 views
1

只是玩弄netfilter REDIRECT-Target。 我想知道如何在使用「--to-ports」(複數)時改變目標端口 。瞭解netfilter REDIRECT目標

iptables -I PREROUTING -t nat -i test -p TCP --dport 2800 -j REDIRECT --to-ports 2900-2905 

第一場比賽/命中2800 - > 2900?
第二場比賽/命中2800 - > 2901?
第三場比賽/命中2800 - > 2902?

在我的測試中,唯一使用的端口是第一個:2900。 在這種情況下,範圍參數「--to-ports」令我感到困惑。 原始端口是否會影響範圍內正在使用的端口? 其中端口被使用,當指定一個帶「--to-ports」的範圍? 「對端口」也起作用,但在手冊頁中未提及。

謝謝。

回答

1

netfilter是無狀態的,它不能跟蹤端口狀態,所以循環不可能實現。

這個參數是意圖以解決端口衝突問題,例如檢查此規則:

iptables -t nat -A PREROUTING -p tcp --dport 1000:2000 -j REDIRECT --to-ports 2900 

如果客戶要建立2個連接

client:3000 <---> server:1000 
client:3000 <---> server:1001 

這是可能的,因爲客戶可以重複使用其港口。如果服務器將兩個連接重定向到端口2900,則兩個連接變爲相同,這會導致問題。

所以服務器需要多個冗餘端口來避免這個問題。但如果客戶端不重用其端口,這不會發生。

+0

非常感謝您的回答! – 2013-03-19 13:01:55