核心是启用IP转发并配置POSTROUTING规则:先执行sysctl -w net.ipv4.ip_forward=1(永久改/etc/sysctl.conf),再根据外网IP是否固定选择SNAT(--to-source指定静态IP)或MASQUERADE(自动适配动态IP)。
配置 SNAT 实现局域网共享上网,核心就两件事:**打开内核转发 + 一条
规则**。其他规则不是必须的,加了反而容易出错。
必须先启用
不打开这个,Linux 默认丢弃非本机目的地址的数据包,NAT 根本没机会生效。
临时生效:
永久生效:改
里这行 →
,再执行
验证是否生效:
输出
才算成功
和
怎么选
关键看外网接口 IP 是固定还是动态:
外网 IP 固定(比如服务器有静态公网 IP)→ 用
:
外网 IP 动态(比如 ADSL 拨号、DHCP 获取、云主机弹性 IP)→ 必须用
:
会自动读取出口网卡当前 IP,
写死 IP;写错
值会导致回包失败
为什么只配
就够了
因为 SNAT 只修改“发出”数据包的源地址,发生在路由之后、发包之前,
是唯一合法位置。
通义灵码 Linux版
通义灵码 Linux版是阿里云推出的一款AI智能编码助手,专为Linux开发者设计。它支持在Linux操作系统下的JetBrains IDEs、Visual Studio Code等主流集成开发环境中运行。该工具基于通义大模型,提供代码智能生成、实时续写、单元测试生成、代码优化以及研发智能问答等功能,旨在帮助Linux用户在编码过程中提升效率。
下载
只能用于
表的
链,其他链加了也无效
不需要在
链额外加
—— 如果你没把
策略设为
,默认就是放行
如果已设
,才需补两条基础放行:
内网客户端配置常被忽略的点
网关和 DNS 不配对,即使 NAT 规则全对,也上不了网。
内网机器网关必须指向 Linux 网关的内网 IP(比如
),不能是外网 IP
DNS 推荐配成公网 DNS(如
或
),别依赖网关转发 DNS —— 多数 Linux 网关默认不开启 DNS 代理
验证方法:在内网机器上
(通)→
(通)→
(不通?大概率是 DNS 问题)
实际生效后,所有来自
的流量从
出去时,源 IP 都会被替换成网关的外网地址。这个替换是一次建立、全程维持的,不用每包判断 —— 但前提是连接未超时、连接状态未被内核清理。长时间空闲的 TCP 连接可能因 conntrack 超时断开,这不是规则问题,是内核行为。
iptables -t natPOSTROUTINGnet.ipv4.ip_forwardsysctl -w net.ipv4.ip_forward=1/etc/sysctl.confnet.ipv4.ip_forward = 1sysctl -pcat /proc/sys/net/ipv4/ip_forward1SNATMASQUERADESNATiptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to-source 203.0.113.42MASQUERADEiptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o ppp0 -j MASQUERADEMASQUERADESNAT--to-sourcePOSTROUTINGPOSTROUTINGSNATnatPOSTROUTINGFORWARDACCEPTFORWARDDROPiptables -P FORWARD DROPiptables -A FORWARD -i eth1 -s 192.168.1.0/24 -j ACCEPTiptables -A FORWARD -o eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT192.168.1.18.8.8.8114.114.114.114ping 192.168.1.1ping 203.0.113.42ping www.baidu.com192.168.1.0/24eth0