搭建NAT网络使局域网内的服务器联网

场景

Node2服务器连接了公网,但是Node1和Node3无法连接公网,他们都在一个局域网内。

原理

Node2允许路由转发,Node1和Node3添加路由表,优先把流量转发给Node2

Node2:
在有网的 node002 上开启路由转发,需要取得root权限。

sudo sysctl -w net.ipv4.ip_forward=1
# 开启 NAT 伪装(假设 eth0 是连外网的网卡)
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Node1、Node3
如果你不想删除原有的路由(怕以后还要用),可以给新路由设置一个极小的 metric 值(值越小,优先级越高):

# 假设原有路由的 metric 是 100,我们设为 10
sudo ip route add default via <node002的内网IP> metric 10

计算机网络

这个操作的本质是把 Node002 变成了一个局域网内的“软路由器”

在默认情况下,Linux 机器像一个孤岛,收到不属于自己的数据包会直接丢弃。通过你的这两步操作,我们打破了这个限制。以下是详细的层级原理说明:


1. Node002 端的原理:从“主机”变身“路由器”

net.ipv4.ip_forward=1 (开启转发门禁)

默认情况下,Linux 内核出于安全考虑,ip_forward 是关闭的(值为 0)。

  • 关闭时:如果 Node002 收到一个目标 IP 不是它自己的数据包,它会直接报错丢弃。
  • 开启后:Node002 就像一个中转站,收到目标 IP 不是自己的包时,它会查自己的路由表,发现:“哦,这个包要去百度,我有出口,我帮你传过去。”

iptables ... -j MASQUERADE (地址伪装/NAT)

这是最关键的一步,涉及 网络地址转换 (NAT) 技术。

  • 问题:Node001 发出的包,源 IP 是局域网私有 IP(如 192.168.1.10)。当这个包通过 Node002 传到公网(比如传给腾讯服务器)时,腾讯服务器想回包,但它无法直接把包发给一个私有 IP,因为公网上有无数个 192.168.1.10
  • 解决MASQUERADE(伪装)会将 Node001 发出的包里的“源 IP”临时替换成 Node002 的“公网 IP”。
  • 回包:当腾讯服务器回包给 Node002 时,Node002 会查一张内部记录表(NAT 表),想起:“这个包其实是刚才 Node001 托我发的”,于是再把目标 IP 改回 Node001 的内网 IP,转发回去。

2. Node001/003 端的原理:重新规划路径

ip route add default via ... (设置下一跳)

这涉及计算机网络的 路由寻址原理

当你在 Node001 上访问 8.8.8.8 时,系统会执行以下逻辑:

  1. 查表:目的地 8.8.8.8 在我的本地局域网(192.168.1.x)吗?
  2. 判断:不在。那么就看“默认网关”(Default Gateway)。
  3. 动作:你添加的命令告诉 Node001:“所有不在本地的对象,全部把包丢给 Node002 的内网 IP。”

metric 10 (优先级的博弈)

Linux 路由表可以有多条“默认路径”。Metric 代表距离(权重)

  • 系统总是选择 Metric最小的那条路。
  • 如果你原本的网关 Metric 是 100(不通),你加了一个 Metric 10 的 Node002。系统会认为这条路“更近/更优”,从而无视旧的那条。

3. 完整数据流向示意图

  1. Node001: 产生请求 查路由表 发现下一跳是 Node002 发给 Node002。
  2. Node002: 收到包 发现开启了 ip_forward 执行 MASQUERADE(把源 IP 换成自己的公网 IP) 送入互联网。
  3. 互联网: 响应数据 发回给 Node002。
  4. Node002: 收到回包 查 NAT 映射表 发现是 Node001 的包 转发给 Node001。

避坑小贴士

  • 持久化sysctl 命令重启后会失效。如果想永久生效,需要修改 /etc/sysctl.conf 并添加 net.ipv4.ip_forward=1
  • 防火墙策略:如果 Node002 开启了 ufwfirewalld,除了 iptables 规则,还需要确保 FORWARD 链是允许通过的(sudo iptables -P FORWARD ACCEPT)。
posted @ 2026-01-27 20:01  ylifs  阅读(51)  评论(0)    收藏  举报