Linux 跨网段路由转发配置

业务场景

环境:两台 Linux 服务器(A、B)

  • A 机器:双网卡

    • enp24s0f0:10.20.40.221/24(与 B 同网段)
    • enp24s0f2:192.168.133.46/24(可访问目标服务 172.16.25.73)
  • B 机器:单网卡

    • ens160:10.20.40.22/24(与 A 的 10.20.40.221 同网段)

需求 :让 B 机器通过 A 机器转发,访问到 172.16.25.73 服务


网络拓扑

graph LR A[机器A<br>enp24s0f0: 10.20.40.221/24<br>enp24s0f2: 192.168.133.46/24] --> |转发| Target[目标服务<br>172.16.25.73] B[机器B<br>10.20.40.22/24] --> |访问| A

解决方案

一、在 A 机器执行

1. 开启 IP 转发

bash 复制代码
# 临时生效
echo 1 > /proc/sys/net/ipv4/ip_forward

# 永久生效
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p

2. 配置 iptables 转发规则

bash 复制代码
# 1. 允许 B 网段(10.20.40.0/23)访问 172.16.25.0/24(插入到第1行,最高优先级)
iptables -I FORWARD 1 -i enp24s0f0 -o enp24s0f2 -d 172.16.25.0/24 -j ACCEPT

# 2. 允许 172.16.25.0/24 回包到 B 网段(插入到第2行)
iptables -I FORWARD 2 -i enp24s0f2 -o enp24s0f0 -s 172.16.25.0/24 -m state --state RELATED,ESTABLISHED -j ACCEPT

# 3. 配置 SNAT,确保回程流量能正确返回
iptables -t nat -A POSTROUTING -o enp24s0f2 -d 172.16.25.0/24 -j MASQUERADE

3. 验证配置

bash 复制代码
# 检查转发规则
iptables -L FORWARD -n -v --line-numbers | head -n 3

# 检查 NAT 规则
iptables -t nat -L POSTROUTING -n -v

# 检查 IP 转发状态
cat /proc/sys/net/ipv4/ip_forward  # 应返回 1

4. 规则持久化(可选)

bash 复制代码
# 方法一:使用 iptables-persistent(Ubuntu/Debian)
apt install iptables-persistent -y
netfilter-persistent save
netfilter-persistent reload

# 方法二:使用 iptables-save 保存到文件
iptables-save > /etc/iptables/rules.v4

# 方法三:使用 service(CentOS/RHEL 6)
service iptables save

# 方法四:写入启动脚本(CentOS/RHEL 7+)
# 创建规则文件
cat > /etc/sysconfig/iptables << 'EOF'
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -o enp24s0f2 -d 172.16.25.0/24 -j MASQUERADE
COMMIT
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A FORWARD -i enp24s0f0 -o enp24s0f2 -d 172.16.25.0/24 -j ACCEPT
-A FORWARD -i enp24s0f2 -o enp24s0f0 -s 172.16.25.0/24 -m state --state RELATED,ESTABLISHED -j ACCEPT
COMMIT
EOF

# 重启 iptables 服务
systemctl restart iptables

二、在 B 机器执行

1. 添加静态路由

bash 复制代码
# 添加指向 A 机器的网关路由,使目标流量经过 A 转发
ip route add 172.16.25.0/24 via 10.20.40.221 dev ens160

2. 验证路由

bash 复制代码
# 查看路由表
ip route show

# 测试连通性
ping -c 3 172.16.25.73

# 测试业务端口(示例:8080)
telnet 172.16.25.73 8080

3. 路由持久化(可选)

bash 复制代码
# 方法一:写入 /etc/network/interfaces(Debian/Ubuntu)
# 在对应的网卡配置中添加
up ip route add 172.16.25.0/24 via 10.20.40.221 dev ens160
down ip route del 172.16.25.0/24 via 10.20.40.221 dev ens160

# 方法二:写入 NetworkManager 路由(CentOS/RHEL)
nmcli con mod ens160 +ipv4.routes "172.16.25.0/24 10.20.40.221"
nmcli con up ens160

# 方法三:写入 /etc/sysconfig/network-scripts/route-ens160(CentOS)
echo "172.16.25.0/24 via 10.20.40.221 dev ens160" >> /etc/sysconfig/network-scripts/route-ens160
systemctl restart network

注意事项

  • 确保 A 机器的防火墙(iptables/firewalld)允许转发流量
  • 如果使用云服务器,需在安全组中放行相应端口和流量
  • 生产环境建议将配置写入网络配置文件,确保重启后生效
  • 建议使用 iptables-save 或 iptables-persistent 保存规则,避免重启丢失
相关推荐
XUEYUAN52123 天前
ASN 自治系统号风控:平台如何通过 IP 所属自治域批量识别代理流量
python·网络协议·http·网络安全·socks5
CHENKONG_CK3 天前
破解制鞋打磨痛点:RFID赋能去毛刺工序自动化升级
网络·单片机·嵌入式硬件·网络协议·tcp/ip
z落落3 天前
C#UDP+串口服务端+UDP 客户端(含 CRC16 校验)
网络·网络协议·udp
曼巴UE53 天前
UE5 客户端 需要的网络同步概念总结(3 )-事件同步 RPC 以及三种调用方式
网络·c++·网络协议·学习·rpc·ue5
开开心心就好3 天前
安卓手写文字生成工具,多种纸张一直免费
网络·网络协议·tcp/ip·leetcode·智能手机·电脑·模拟退火算法
K成长日志4 天前
DALI协议-Part209-颜色控制
物联网·网络协议·iot·智能照明·智能建筑·dali
IPdodo_4 天前
跨境 API 调用不稳定怎么办:出口、超时重试与链路监控的实践
网络·python·网络协议
那年窗外下的雪.5 天前
AIDC 学习日志|第 27 天|EVPN 多归属收敛时间线与 Leaf2 接管验证
网络协议·学习·http·tcpdump
j7~5 天前
【Linux】三十八.C++ 手写 HTTP 服务器:裸 socket + fork 多进程,从 HTTP 报文解析到浏览器打开网页
linux·网络·网络协议·学习·http·网络编程
小则又沐风a5 天前
深入理解TCP协议----滑动窗口,流量控制
linux·网络协议·tcp