1.簡介
TCP協議規定只有處於同一個網段的IP才能實現互通,如果處於不同網段,可以配置一台雙網卡機器為網關然后指定路由線路實現跨網段訪問。上一節的端口映射只是針對某台服務器中的少量端口進行映射的一個方案,但是如果有很多服務程序需要進行映射無疑是一個大量的工作,這個時候如果安全允許的情況下則可以進行路由方案將一台服務器完全暴露給外部進行交互。
實現思路:將雙網卡服務器作為一個代理服務器,實現雙向網關的一個功能

如上圖所示,Proxy作為雙向網關
Client如果要實現Server的互通,如果Client和Server在同一個子網段可以直接ping同,但是如果不在同一個網段,Client就會先去找其網關,再由其網關尋找Server,對於Server也是這樣。

2.實現方案
2.1代理
1.開啟數據包的轉發功能
代理服務器打開終端執行如下命令
echo 1 >/proc/sys/net/ipv4/ip_forward
默認值0是禁止數據包轉發,修改為1即開啟數據包轉發功能。如果提示無權限,可以使用vi或者gedit工具打開ip_forward文件直接修改。
2.設置路由表
先說配置方法:
1. 代理服務器中新增發往Server端的路由表
sudo route add -net 10.168.9.0 netmask 255.255.255.0 dev eth1
這條路由表的含義就是發往10.168.9.0/24網段的數據包都由eth1網卡發出
2.代理服務器中新增發往Client端的路由表
新增靜態路由sudo route add -net ip dev 網卡
刪除靜態路由sudo route del-net ip dev 網卡
sudo route add -net 192.168.1.0/24 netmask 255.255.255.0 dev eth0
這條路由表的含義就是發往192.168.1.0/24網段的數據包都由eth0網卡發出
3. Client服務器中設置網關為192.168.1.1
1 sudo route add default gw 192.168.1.1
設置之后就表示當Client端連接其他網段(非Client子網)時,就會找到192.168.1.1,進而使用192.168.1.1進行連接
注意:
網關只能設置為同一網段的其他IP;
如果只是設置了網關但是沒有在代理服務器中指定路由表(即步驟1,2),則Client端可以ping通代理上面的兩張網卡,但是不能ping通10.168.1.xx的其他子網,即不能ping通Server端
4. Server端設置網關為10.168.9.1
sudo route add defaultgw 10.168.9.1
以上步驟執行之后則可以互相ping通