路由转发是Linux内核的核心功能之一。开启后,服务器就像一台路由器,可以在不同网卡之间转发数据包。本文介绍如何开启和配置这一功能。
简单说,就是让Linux服务器从一个网卡接收到的数据包,从另一个网卡发出去。典型场景:
双网卡服务器:一块网卡连外网,另一块连内网,让内网设备通过它上网
VPN服务器:客户端连上VPN后,流量经由服务器转发到互联网
虚拟机/容器网络:让容器通过宿主机访问外部网络
echo 1 > /proc/sys/net/ipv4/ip_forward
或使用sysctl命令:
sysctl -w net.ipv4.ip_forward=1
编辑 /etc/sysctl.conf 文件,找到或添加:
net.ipv4.ip_forward = 1
使配置生效:
sysctl -p
# 临时 echo 1 > /proc/sys/net/ipv6/conf/all/forwarding # 永久 echo "net.ipv6.conf.all.forwarding = 1" >> /etc/sysctl.conf sysctl -p
光开启转发还不够,还需要配置源地址转换(SNAT),让内网设备通过服务器上网。
eth0:连接外网(IP: 203.0.113.10)
eth1:连接内网(IP: 192.168.1.1)
# 1. 开启转发(上面已做) # 2. 配置SNAT,将内网流量伪装成服务器的公网IP iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
MASQUERADE 会自动使用出口网卡的IP,适合公网IP不固定的场景。如果公网IP固定,也可用:
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to-source 203.0.113.10
IP:192.168.1.100(与服务器eth1同网段)
网关:192.168.1.1(服务器eth1的IP)
DNS:8.8.8.8 或内网DNS
如果想让外网用户通过服务器访问内网的Web服务器:
# 将外网访问服务器80端口的请求,转发到内网192.168.1.100:80 iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.1.100:80 # 确保返回包能正确回到客户端(通常与SNAT规则配合)
同时需要确保内网服务器的网关指向这个Linux服务器。
Ubuntu/Debian:
apt-get install iptables-persistent iptables-save > /etc/iptables/rules.v4
CentOS/RHEL 7+:
yum install iptables-services service iptables save
cat /proc/sys/net/ipv4/ip_forward # 输出1表示已开启
iptables -t nat -L -n -v
ping 8.8.8.8 # 能通说明转发+SNAT工作正常
conntrack -L
检查转发是否开启:cat /proc/sys/net/ipv4/ip_forward
检查SNAT规则:iptables -t nat -L POSTROUTING
检查内网设备网关是否设为服务器内网IP
# 查看系统日志 dmesg | grep -i "ip_forward" journalctl -xe | grep -i "forward" # 检查连接数是否过高 # 对于大量连接,建议开启TCP时间戳 echo "net.ipv4.tcp_timestamps = 1" >> /etc/sysctl.conf
检查DNAT规则是否正确
检查服务器的防火墙是否放行相应端口:iptables -L INPUT
检查内网服务器是否已正确配置网关
开启路由转发后,服务器暴露在网络边界,建议:
# 默认拒绝转发 iptables -P FORWARD DROP # 只允许特定网段转发 iptables -A FORWARD -s 192.168.1.0/24 -j ACCEPT
# 开启反向路径过滤 echo "net.ipv4.conf.all.rp_filter = 1" >> /etc/sysctl.conf
iptables -A FORWARD -p tcp --dport 80 -m connlimit --connlimit-above 100 -j DROP
如果需要图形化管理端口转发和多节点调度:
它提供Web界面,支持多台后端服务器的流量分发和故障转移,几分钟即可完成配置,适合需要快速部署可视化管理的场景。
开启Linux路由转发功能只需三步:
开启IP转发:sysctl -w net.ipv4.ip_forward=1
配置iptables:
内网上网用SNAT(MASQUERADE)
外网访问内网用DNAT
保存规则:防止重启丢失
核心原理就是让数据包在不同网卡间“通行”,然后通过iptables修改地址,让流量能够正确往返。掌握这些,你的Linux服务器就能变身成一台灵活的网络路由器。