配置 SNAT 让2016 和SRV1 能上外网
-
实现局域网内私有 ip 访问外网
-
前提条件
-
局域网各主机正确设置了IP 地址/子网掩码;
可以 ping 通网关
-
局域网各主机正确设置了默认网关地址;
-
Linux 网关 GW 支持IP 路由转发。
-
网关可以访问公共网络
vim /etc/sysctl.conf # 添加以下内容 net.ipv4.ip_forward = 1
-
-
此时局域网内主机 ping 外网 114.114.114.114 无法ping 通
-
网关出接口网卡抓包
发现有 icmp echo 包而无 icmp reply 包
原因是 192.168.1.131 为私网地址,目标在接收到数据包后无法在公共网络上找到私网 ip 的路由,无法回复
解决:在网关上添加 SNAT 转换,私有 ip 经过 GW 时转换成网关的公网 ip,目标主机在回复数据包时可以在公共网络上找到网关的路由,从而将回复的数据包发送给网关,SNAT 网关接收到响应数据包后,将其目标 IP 地址替换为内部主机的私有 IP 地址。
-
GW 上配置
iptables -t nat -I POSTROUTING -p all -o ens32 -j SNAT --to-source 10.4.7.130 # -t nat:指定要操作的表为 nat 表,该表用于处理网络地址转换。 # -p all:匹配所有协议的数据包。 # -o ens32:指定出口网卡为 ens32 # -j SNAT:指定要执行的动作为 SNAT,即进行源地址转换 # --to-source 10.4.7.130:将数据包的源 IP 地址修改为 10.4.7.130
网关 GW 连接外网的网卡为 NAT 模式,IP 为 10.4.7.130,可访问外网,访问外网时还需经外部设备的 NAT 转换,此处忽略
查看
iptables -t nat -L POSTROUTING
-
验证
局域网内主机 Client ping 114.114.114.114
抓包结果
连接外网的网卡抓包显示源地址为 10.4.7.130 说明局域网内的私有 ip 在经过网关后经过 SNAT 转换为了网关 ip 从而实现访问外网
配置DNAT 让2016 访问网关8080 端口 实际上访问的是1.200 的8080 上的tomcat
-
目的地址转换,实现访问其他局域网内主机
-
前提条件
- 客户端和服务器的网关可以通信
- 局域网的Web 服务器能够访问Internet。
- 网关的外网IP 地址有正确的DNS 解析记录。
- Linux 网关支持IP 路由转发
-
简化拓扑
实现 Client 访问 GW 192.168.1.254:8080 时访问的是 172.16.1.100:8080 的页面
-
添加规则前访问 http://192.168.1.254
-
GW 上添加规则
将通过 ens33 网卡接收到的目标 IP 地址为 192.168.1.254,目标端口为 8080 的 TCP 数据包的目的地址修改为 172.16.1.100:8080,然后再转发到目标地址
iptables -t nat -I PREROUTING -d 192.168.1.254 -i ens33 -p tcp --dport 8080 -j DNAT --to-destination 172.16.1.100:8080 # -I PREROUTING:将规则插入到 PREROUTING 链的开头,该链用于对入站数据包进行处理 # -d 192.168.1.254:匹配目标 IP 地址为 192.168.1.254 的数据包 # --dport 8080:匹配目标端口为 8080 的数据包 # --to-destination 172.16.1.100:8080:将数据包的目的地址修改为 172.16.1.100:8080
查看
iptables -t nat -L PREROUTING
-
验证
此时访问 http://192.168.1.254