Linux系统中启用IP转发的配置方法
IP地址可分为公网地址与内网地址。公网地址由IANA(互联网号码分配机构)统一分配,用于公共网络通信。内网地址属于非注册地址,仅限组织内部使用。内网地址无法直接与外部网络交互,需通过路由转发(如NAT)或专用协议(如PPP)实现通信。
Linux系统出于安全策略,默认禁用数据包转发功能。该功能指当主机配置多网卡时,系统根据数据包目标地址将流量从一个网卡转发至另一个网卡,此机制常用于路由器设备。
1、检查IP转发状态可通过以下两种方式验证:
使用sysctl命令:
sysctl net.ipv4.ip_forward
查看系统文件:
cat /proc/sys/net/ipv4/ip_forward
返回值为0表示未启用,1表示已启用。
2、临时启用IP转发执行以下任一命令即可立即生效:
sysctl -w net.ipv4.ip_forward=1
或
echo 1 > /proc/sys/net/ipv4/ip_forward
此方法重启后失效。
永久生效配置: 编辑/etc/sysctl.conf文件,添加:
net.ipv4.ip_forward = 1
保存后执行:
sysctl -p /etc/sysctl.conf
Red Hat系系统可重启网络服务:
service network restart
Debian/Ubuntu系系统执行:
/etc/init.d/procps restart
3、iptables规则配置IP转发需配合防火墙规则使用。iptables包含三个核心表:
- Filter表:处理进入主机的数据包,包含INPUT/OUTPUT/FORWARD链
- NAT表:用于地址转换,包含PREROUTING/POSTROUTING/OUTPUT链
- Mangle表:用于特殊数据包修改
转发规则示例允许特定接口的数据包转发:
iptables -A FORWARD -i enp0s3 -j ACCEPT
iptables -A FORWARD -o enp0s3 -j ACCEPT
NAT地址伪装配置:将内网IP替换为公网IP:
iptables -t nat -A POSTROUTING -o ens33 -j MASQUERADE
目标地址转换(DNAT):将外部请求转发至内网服务器:
iptables -t nat -A PREROUTING -i ens33 -p tcp --dport 80 -j DNAT --to 172.31.0.23:80
需确保FORWARD链允许相关流量:
iptables -A FORWARD -i ens33 -p tcp --dport 80 -d 172.31.0.23 -j ACCEPT
4、地址重定向示例将特定目标IP的流量重定向至其他地址:
内网到公网映射:
iptables -t nat -A OUTPUT -d 121.8.210.236 -j DNAT --to-destination 192.168.191.236
反向映射:
iptables -t nat -A OUTPUT -d 192.168.191.236 -j DNAT --to-destination 121.8.210.236