🔀 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 -pSNAT 配置(内网服务器共享公网 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 MASQUERADEDNAT 配置(端口转发)
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