NAT 网络地址转换

在这里插入图片描述



背景

条件

物理服务器、Linux 操作系统、多网口 ens33、ens36,网段分别为 192.168.172.0/24、172.16.20.0/24。

需求

如何实现当访问 https://172.16.20.132:19200 时访问的是 https://192.168.172.131:9200。

方案

通过服务器系统 iptables 实现 NAT 端口映射。

步骤

启用 IP 转发

echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p

设置 DNAT(目的地址转换)

将 172.16.20.132 的某个端口(如 19200)映射到 192.168.172.131 的服务端口(如 9200)

iptables -t nat -A PREROUTING -i eth0 -d 172.16.20.132 -p tcp --dport 19200 -j DNAT --to-destination 192.168.172.131:9200

# 注意:eth0 是 172.16.20.132 的网络接口名

设置 SNAT 或 MASQUERADE(源地址转换)

确保从 172 段返回的流量能够正确路由回 192 段

iptables -t nat -A POSTROUTING -o eth1 -d 192.168.172.131 -p tcp --dport 9200 -j MASQUERADE

# 注意:eth1 是 192.168.172.131 的网络接口名

防火墙配置(可选)

iptables -A FORWARD -i eth0 -o eth1 -p tcp --dport 9200 -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -p tcp --sport 9200 -j ACCEPT

保存配置

service iptables save

流量工作流程

  • 客户端 (172 段) 向 172.16.20.132:19200 发起请求。
  • 服务器的 eth1 接收到请求,通过 DNAT 将流量转发到 192.168.172.131:9200
  • 192.168.172.131 的响应通过服务器返回给 172 段客户端,经过 SNAT,源地址会被替换为 172.16.20.132

验证

测试连接

在 172 段客户端访问 curl http://172.16.20.132:19200

如果无法访问,检查以下内容:

  • iptables NAT 规则是否生效

    iptables -t nat -L -n -v
    
  • 确保服务器的 eth0 可以访问 192.168.172.131

  • 日志调试(可以启用日志查看数据流是否经过)

    iptables -A FORWARD -j LOG --log-prefix "NAT_FORWARD: "
    

这种方式无需修改网络互通设置,只需通过 NAT 规则即可实现跨网段访问。

实验

环境

  • 产品:VMware® Workstation 16 Pro

  • 版本:16.2.4 build-20089737

  • 虚拟机/服务

    主机服务端口备注
    192.168.172.131/24elasticsearch9200部署 es 服务
    172.16.20.132/24-19200NAT 映射、验证

步骤

创建虚拟网络

[外链图片转存中...(img-d6meNNaf-1734790157579)]
在这里插入图片描述

点击下图【添加网络】按钮,并添加仅主机模式的 VMnet9,VMnet1 默认存在,可不用改动。

在这里插入图片描述

虚拟机添加双网卡

分别添加 VMnet9、VMnet1 仅主机模式的虚拟网卡。

在这里插入图片描述

如下会多出一个网络 ens36,下面静态我已经配置过了。

在这里插入图片描述

如何配置静态IP?

ens33:

vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=b1684e7b-7e07-4a97-aab3-deaf26b8d82b
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.172.131
NETMASK=255.255.255.0
GATEWAY=192.168.172.2
DNS1=114.114.115.115
DNS2=61.139.2.69

ens36:

获取 ens36 的 UUID

在这里插入图片描述

cp /etc/sysconfig/network-scripts/ifcfg-ens33 /etc/sysconfig/network-scripts/ifcfg-ens36
vim /etc/sysconfig/network-scripts/ifcfg-ens36
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens36
UUID=89d5e81a-d9d3-4ef7-8f10-fd82b4fc707d
DEVICE=ens36
ONBOOT=yes
IPADDR=172.16.20.132
NETMASK=255.255.255.0
GATEWAY=172.16.20.2
DNS1=114.114.115.115
DNS2=61.139.2.69
部署 ES 服务

部署过程略。

https://192.168.172.131:9200/

在这里插入图片描述

此时 https://172.16.20.132:9200/ 是无法访问的,因为网络不同

在这里插入图片描述

启用 IP 转发
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p
设置 DNAT - 目标地址转换

将 172.16.20.132 的某个端口(如 19200)映射到 192.168.172.131 的 9200 端口

iptables -t nat -A PREROUTING -i ens36 -d 172.16.20.132 -p tcp --dport 19200 -j DNAT --to-destination 192.168.172.131:9200

# 此规则的作用是将到达 172.16.20.132 的 TCP 流量,端口为 19200 的请求,转发到 192.168.172.131 的 9200 端口。
设置 DNAT - 源地址转换

确保从 192 段返回的流量能够正确路由回 172 段

iptables -t nat -A POSTROUTING -o ens33 -d 192.168.172.131 -p tcp --dport 9200 -j MASQUERADE

# 此规则的作用是,当返回流量从 192.168.172.131:9200 发往客户端时,源IP会被伪装成出接口 ens33 的IP地址。

查看 iptables 规则:

iptables -t nat -L -n -v

在这里插入图片描述

访问验证

https://172.16.20.132:19200/

在这里插入图片描述

证明了我们的 NAT 转换效果。

思考?

以上讨论的是单服务器多网口、网口不同网段情况下的 NAT 配置,那如果是多服务器的情况下呢?又如何配置呢?其实还是一样的。

物理服务器、Linux 操作系统
A 服务器 ens33、192.168.172.131/24
B 服务器 ens36、172.16.20.132/24;ens40、192.168.172.132/24

A 服务器为单网口接入网线,B 服务器为多网口接入网线,B 服务器的 ens40 与 A 服务器的 ens33 处于同个网络。

如何实现当访问 https://172.16.20.132:19200 时访问的是A服务器的 https://192.168.172.131:9200。

步骤:

  • B 服务器上配置端口转发(DNAT)

    sudo iptables -t nat -A PREROUTING -i ens36 -d 172.16.20.132 -p tcp --dport 19200 -j DNAT --to-destination 192.168.172.131:9200
    
  • B 服务器上配置源地址转换(SNAT)

    sudo iptables -t nat -A POSTROUTING -o ens40 -j MASQUERADE
    

—END
B 服务器上配置端口转发(DNAT)

sudo iptables -t nat -A PREROUTING -i ens36 -d 172.16.20.132 -p tcp --dport 19200 -j DNAT --to-destination 192.168.172.131:9200
  • B 服务器上配置源地址转换(SNAT)

    sudo iptables -t nat -A POSTROUTING -o ens40 -j MASQUERADE
    

—END

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

云计算-Security

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

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

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

打赏作者

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

抵扣说明:

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

余额充值