nat表配置转发-->实现不同网段网络/数据通信
近期在做让两个在私网网段的主机通过公网实现相互通信的项目,也是我看了很多资料、翻了很多博客才实现了主机互通,现拿出来与大家分享。本博客仅做自己的学习笔记,不足之处请大佬多多斧正。
该图就是网络拓扑图,预实现主机A与主机B通过两个服务器(service 1 && service 2)实现数据通信。
在nat表的配置之前我们要先了解一下nat表的常用的命令,及其各个含义。
源地址转换
iptables -t nat -A POSTROUTING -p tcp -o eth2 -s 192.168.1.0/24 -j SNAT --to-source 10.79.2.1
-t nat: 使用nat表
-A POSTROUTING:使用路由后规则转换POSTROUTING,在数据包到达防火墙时进行路由判断之前执行的规则,作用是改变数据包的目的地址、目的端口
-p tcp:tcp协议
-o eth2:匹配外网输出端口eno2
-s 192.168.1.0/24: 源地址为192.168.1网段
-j SNAT:源网络地址转换
--to-source 10.79.2.2:转换地址为10.79.2.2
目的地址转换
iptables -t nat -A PREROUTING -i eth1 -d 192.168.2.2 -p tcp -j DNAT --to-destination 10.79.2.2
-t nat: 使用nat表
-A PREROUTING:使用路由前规则转换PREROUTING,在数据包离开防火墙时进行路由判断之后执行的规则,作用改变数据包的源地址、源端口
-i eth1:匹配内网输入端口eno1
-d 192.168.2.2: 目的地址为192.168.2.2
-p tcp:tcp协议
-j DNAT:使用目的地址转换
--to-destination 10.79.2.2:转换的地址为10.79.2.2
nat表配置
第一部分,主机A -->主机B的数据通信
-
首先 在service 1里配置源地址与目的地址转换的相关参数
-
由于我们的主机A 与主机B不在同一网段,所以我们先在service 1 上将(主机A-->主机B)的源地址请求改到 service 1 --> service 2这个网段上来。(即:将主机A-->主机B的源地址改为:10.79.2.1)
iptables -t nat -A POSTROUTING -o eth1 -s 192.168.1.0/24 -j SNAT --to-source 10.79.2.1
-
同理,我们也需要在service 1 上将主机A 的目的地址转换成service 2 的ip地址。(将主机A-->主机B的目的地址改为:10.79.2.2)。
iptables -t nat -A PREROUTING -i eth2 -d 192.168.2.2 -j DNAT --to-destination 10.79.2.2
-
然后 我们需要在service 2 里配置与service 1 相对应的源地址与目的地址转换
在上一步的过程中,我们将主机A的源地址转换成了service 1 的ip地址(10.79.2.1),将主机A的目的地址转换成了service 2 的ip地址(10.79.2.2)。那么接下来我们就需要在service上做相同的事情。
-
我们需要对转换到service 1上的源地址进行转换,即将service 1 接收到的源地址转换成我们主机 A的地址,做这一步工作是为了让主机B知道我们的数据是从主机A过来的。
iptables -t nat -A POSTROUTING -o eth1 -s 10.79.2.1 -j SNAT --to-source 192.168.1.2
-
以上源地址转换工作已经完成,但是我们数据的目的地址还是service 2啊,那么要不要改呢?答案是必须的,如果不对目的地址进行转换的话我们的数据是没办法走过去的。
iptables -t nat -A PREROUTING -i eth2 -d 10.79.2.2 -j DNAT --to-destination 192.168.2.2
以上就完成了我们主机A -->主机B的单程通信。但是,我们的目标是实现主机A与主机B实现互通。所以接下来的步骤就和上面的步骤如出一辙。
第二部分:主机B-->主机A的数据通信
-
因为我们的主机B是与service 2 的eth1网口直连的,所以我们这次先在service 2上做源地址与目的地址转换。
-
源地址转换就是将主机B的地址转换成service 2 的ip地址
iptables -t nat -A POSTROUTING -o eth2 -s 192.168.2.0/24 -j SNAT --to-source 10.79.2.2
-
目的地址转换就是将主机B的目的地址(主机A的地址)转换成service 1的ip地址
iptables -t nat -A PREROUTING -i eth1 -d 192.168.1.2 -j DNAT --to-destination 10.79.2.1
-
接下来我们就需要再回到service 1上做出相对应的nat表配置了
-
将主机B的源地址从service 2 的地址转换回去
iptables -t nat -A POSTROUTING -o eth1 -s 10.79.2.2 -j SNAT --to-source 192.168.2.2
-
将主机B的目的地址从service 1 的地址转换为主机A的地址
iptables -t nat -A PREROUTING -i eth2 -d 10.79.2.1 -j DNAT --to-destination 192.168.1.2
以上就完成了我们主机B-->主机A的单程通信,将上述两部分结合起来,我们就实现了主机A<---->主机B的相互通信啦。
-
当我们遇到数据通信不成功时,这需要将我们查看我们的路由转发功能是否开启了(Linux默认是不生效的),以下是开启办法。
sudo vim /etc/sysctl.conf
//在文档末尾添加上
net.ipv4.ip_forward = 1
//然后在保存退出
//最后在终端输入 sudo sysctl -p 让路由转发立即生效就好了
更多推荐
所有评论(0)