利用iptables的規則來實現端口轉發:
第一步需要將內核參數的net.ipv4.ip_forward=1
場景一:實現本地端口轉發
本地端口轉發實在PREROUTING鏈中將端口做NAT轉換:
# iptable -t nat -A PREROUTING -p tcp --dport "$原端口" -j REDIRECT --to-port "$目標端口"
場景二、實現端口遠程端口轉發
遠程端口轉發原理,是在本地PREROUTING鏈中將端口進行NAT轉換,然后通過FORWARD鏈轉至POSTROUTING鏈中,然后在POSTROUTING中將原client地址進行SNAT的轉換
1、 DNAT轉換 iptable -t nat -A PREROUTING -p tcp -m tcp --dport "$原端口" -j DNAT --to-destination xxx:xxx:xxx:xxx:$目標端口 note:xxx:xxx:xxx:xxx為目標機器地址
2、FORWARD放行: iptable -t filter -A FORWARD -j ACCEPT ### 此處可設置其他的過濾條件
3、SNAT轉換: iptable -t nat -A POSTROUTING -p tcp -m tcp --dport $目標端口 -j SNAT --to-source "xxx:xxx:xxx:xxx" note: xxx:xxx:xxx:xxx 為端口轉發機器地址
可選 設置
如果要實現本地應用程序訪問目標端口:如 curl http://xxx.xxx.xxx.xxx:$目標端口/ note: xxx:xxx:xxx:xxx 為端口轉發機器地址
因為本地應用(用戶空間)訪問目標端口時,是通過OUT鏈路出用戶空間,必須在OUT 鏈中添加相應DNAT的規則,再經過POSTROUTING鏈出去目標機器
iptables -t nat -A OUTPUT -p tcp -m tcp --dport "$原端口" -j DNAT --to-destination xxx:xxx:xxx:xxx:$目標端口 note: xxx:xxx:xxx:xxx 為目標機器地址