Linux 网关 配置 SNAT 和 DNAT

配置 SNAT 让2016 和SRV1 能上外网

  • 实现局域网内私有 ip 访问外网

  • 前提条件

    • 局域网各主机正确设置了IP 地址/子网掩码;

      可以 ping 通网关

    • 局域网各主机正确设置了默认网关地址;

    • Linux 网关 GW 支持IP 路由转发。

    • 网关可以访问公共网络

      vim /etc/sysctl.conf 
      # 添加以下内容
      net.ipv4.ip_forward = 1
      
  • 此时局域网内主机 ping 外网 114.114.114.114 无法ping 通

    image-20231013130532777

  • 网关出接口网卡抓包

    image-20231013130652699

    发现有 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
    

    image-20231013131904983

  • 验证

    局域网内主机 Client ping 114.114.114.114

    image-20231013131928126

    抓包结果

    连接外网的网卡抓包显示源地址为 10.4.7.130 说明局域网内的私有 ip 在经过网关后经过 SNAT 转换为了网关 ip 从而实现访问外网

    image-20231013132105921

配置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 的页面

    image-20231013133519919

  • 添加规则前访问 http://192.168.1.254

    image-20231013133745490

  • 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
    

    image-20231013134142118

  • 验证

    此时访问 http://192.168.1.254

    image-20231013134221600

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gjl_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值