1.简介
TCP协议规定只有处于同一个网段的IP才能实现互通,如果处于不同网段,可以配置一台双网卡机器为网关然后指定路由线路实现跨网段访问。上一节的端口映射只是针对某台服务器中的少量端口进行映射的一个方案,但是如果有很多服务程序需要进行映射无疑是一个大量的工作,这个时候如果安全允许的情况下则可以进行路由方案将一台服务器完全暴露给外部进行交互。
实现思路:将双网卡服务器作为一个代理服务器,实现双向网关的一个功能
![](https://img2020.cnblogs.com/blog/1037399/202110/1037399-20211027141850013-864694575.png)
如上图所示,Proxy作为双向网关
Client如果要实现Server的互通,如果Client和Server在同一个子网段可以直接ping同,但是如果不在同一个网段,Client就会先去找其网关,再由其网关寻找Server,对于Server也是这样。
![](https://img2020.cnblogs.com/blog/1037399/202110/1037399-20211027141911671-976627874.png)
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通