網絡結構如下
需求
PC 只能訪問到 Linux,需要 Linux 轉發數據包,使得 PC 可以訪問到路由器。
使用 iptables 轉發
iptables -t nat -I PREROUTING -p tcp --dport 10000 -j DNAT --to-destination 192.168.0.1:80
iptables -t nat -I POSTROUTING -p tcp -d 192.168.0.1 --dport 80 -j SNAT --to-source 192.168.0.20
這樣當 PC 訪問 192.168.194.20:10000 時,實際就可訪問到路由器(192.168.0.1)了。
命令的解釋如下:
- 當發起到 Linux 的連接請求時,數據包從 192.168.194.10 發出,到達 Linux 主機 192.168.194.20,經過 Linux 時將數據包重新構造,把數據包的目的地址由 192.168.194.20 改爲 192.168.0.1。
- 經過第一步處理的數據包進入 192.168.194.20,數據包從 192.168.0.20 發向 192.168.0.1 時,將數據包的源地址 192.168.194.11 改爲192.168.0.20。
- 路由器接收到請求數據包之後響應,響應數據包從 192.168.0.1 發送到 192.168.0.20,在接收到源地址爲 192.168.0.1 的數據包時,將其目的地址 192.168.0.20 改爲 192.168.194.11。
- 數據包第三步處理後流向 192.168.194.20,當數據包流出 192.168.194.20 時,將其源地址 192.168.0.1 改爲 192.168.194.20。
其他 iptables 命令
顯示規則:iptables -t nat -L PREROUTING --line-numbers
刪除規則:iptables -t nat -D PREROUTING 1(規則序號)