Skip to content

🔀 NAT 配置

什么是 NAT?

NAT(网络地址转换)就像酒店前台——外面的人打电话到前台(公网 IP),前台帮你转接到房间号(内网 IP)。外界不知道你的真实房间号。

类型全称用途比喻
SNAT源地址转换内网机器上网(改源 IP)寄快递时填酒店地址
DNAT目的地址转换外网访问内网服务(改目的 IP)前台把电话转到房间
MASQUERADE动态 SNAT拨号上网等 IP 会变的场景用临时名片

开启 IP 转发

bash
# 临时开启
echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward > /dev/null

# 永久开启
echo "net.ipv4.ip_forward = 1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

SNAT 配置(内网服务器共享公网 IP 上网)

bash
# 假设:
# - 网关服务器有两块网卡:eth0(公网 203.0.113.1)、eth1(内网 192.168.1.1)
# - 内网机器 192.168.1.100 要上网

# 在网关服务器上配置 SNAT
sudo iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to-source 203.0.113.1

# 如果公网 IP 是动态的(DHCP/PPPoE),用 MASQUERADE
sudo iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE

DNAT 配置(端口转发)

bash
# 把外网的 8080 端口转发到内网的 192.168.1.100:80
sudo iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.100:80

# 配合 FORWARD 链允许转发
sudo iptables -A FORWARD -p tcp -d 192.168.1.100 --dport 80 -j ACCEPT

# 把外网的 3306 端口转发到数据库服务器
sudo iptables -t nat -A PREROUTING -p tcp --dport 3306 -j DNAT --to-destination 192.168.1.200:3306
sudo iptables -A FORWARD -p tcp -d 192.168.1.200 --dport 3306 -j ACCEPT