网卡转发是Linux网络的核心功能之一,简单说就是让一块网卡收到的数据包,从另一块网卡发出去。当你的Linux服务器有两块以上网卡时,它就能像路由器一样在不同网络之间传递数据-1。
默认情况下,Linux不会转发任何数据包。要开启这个功能,只需一条命令:
# 临时开启(重启后失效) echo 1 > /proc/sys/net/ipv4/ip_forward # 永久开启:编辑 /etc/sysctl.conf,找到并修改 net.ipv4.ip_forward = 1 # 然后执行 sysctl -p
如果你有一台内网服务器(IP: 192.168.1.100)没有公网IP,而你的Linux服务器有两块网卡(eth0接外网、eth1接内网),可以通过iptables让内网服务器共享上网:
# 将内网过来的流量伪装成Linux服务器的公网IP发出 iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
这就是典型的源地址转换(SNAT),俗称“上网代理”-6。
反过来,你想让外网用户访问Linux服务器的8080端口,实际访问的是内网Web服务器的80端口:
# 修改目标地址:将访问8080的请求转发到内网服务器 iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.100:80
这就是目的地址转换(DNAT),常用于端口映射和内网服务暴露-6-8。
假设你有一台双网卡Linux:
eth0:连接外网(公网IP或上级路由器)
eth1:连接内网(IP: 192.168.1.1)
完整配置如下:
# 1. 开启IP转发 echo 1 > /proc/sys/net/ipv4/ip_forward # 2. 配置iptables规则 # 内网设备上网用(SNAT) iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE # 外网访问内网服务器(可选,DNAT) iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.100:80 # 3. 保存规则(以Ubuntu/Debian为例) apt-get install iptables-persistent iptables-save > /etc/iptables/rules.v4
如果你不想敲命令,需要更直观的管理方式,可以试试这款80km无痕网关:
它提供图形化管理界面,可以轻松配置端口转发规则,支持多台后端服务器的流量分发和故障转移,几分钟就能完成设置。
开启转发后如果网络不通,用这些命令检查:
# 查看IP转发是否开启 cat /proc/sys/net/ipv4/ip_forward # 查看nat表规则 iptables -t nat -L -n -v # 抓包看流量是否经过 tcpdump -i eth0 -n host 192.168.1.100
Linux网卡转发的本质就两步:开启IP转发 + 配置iptables规则。SNAT让内网设备上网,DNAT让外网访问内网服务。掌握了这两个核心概念,你的Linux服务器就能变身成一台灵活的网络路由器。