基础拓扑
A:192.168.10.11
B(双网卡主机)
eth1:192.168.10.13
eth2:192.168.11.11
C:192.168.11.13
两大目标说明
- 目标 1:开启跨网卡转发→ 让 C ↔ A 互通
- 目标 2:网卡流量隔离→ 禁止两张网卡之间报文互通(关闭转发 + 防火墙兜底)
一、核心知识点回顾
1. 实现跨网段转发三大必要条件(同时满足)
- 主机 B 开启 IP 转发(ip_forward=1)
- C 配置静态路由:
192.168.10.0/24 via 192.168.11.11 - A 配置回程路由:
192.168.11.0/24 via 192.168.10.13
2. 主机防火墙三条流量链
- INPUT:目标 IP 为本机的数据包
- OUTPUT:本机软件主动向外发送的数据包
- FORWARD:跨网卡转发数据包(网卡 A 进、网卡 B 出)
重点:想要隔离两张网卡,核心管控FORWARD 链
3. 关键区分
- IP 转发开关:内核总闸;开关打开只是允许转发,防火墙依然可以拦截;
- IP 转发关闭:内核直接丢弃跨网卡报文,防火墙 FORWARD 链不再生效;
- 隔离方案标准组合:关闭 ip_forward + 防火墙禁止双向转发(双重保障)
二、Linux 完整命令(iproute2 + iptables)
环境:设备 B(双网卡 eth1、eth2)
操作 1:开启跨网卡转发(实现 C 访问 A)
# 1. 开启内核转发(临时) sysctl -w net.ipv4.ip_forward=1 # 永久开启:/etc/sysctl.conf 添加 net.ipv4.ip_forward=1 sysctl -p # 2. 防火墙放行转发流量(允许eth2 ↔ eth1互相转发) # 默认策略允许转发 iptables -P FORWARD ACCEPT # 按需细化:允许eth2 <-> eth1转发 iptables -A FORWARD -i eth2 -o eth1 -j ACCEPT iptables -A FORWARD -i eth1 -o eth2 -j ACCEPT操作 2:网卡隔离(禁止两张网卡互相转发流量)
两种方案,推荐方案 2 双层防护
方案 2.1 最简方案:直接关闭内核转发
sysctl -w net.ipv4.ip_forward=0 # 内核层面直接丢弃跨网卡报文,防火墙无需配置方案 2.2 双层防护(推荐,即使误开 ip_forward 依然隔离)
# 1. 优先关闭转发 sysctl -w net.ipv4.ip_forward=0 # 2. 防火墙阻断双向跨网卡转发 iptables -P FORWARD DROP # 禁止 eth2 → eth1 iptables -A FORWARD -i eth2 -o eth1 -j DROP # 禁止 eth1 → eth2 iptables -A FORWARD -i eth1 -o eth2 -j DROPLinux 查看命令
# 路由表 ip route ip route get 192.168.10.11 # 转发状态 sysctl net.ipv4.ip_forward # 查看iptables转发规则 iptables -L FORWARD -v持久化说明
iptables 规则重启失效;生产环境使用 iptables-save /firewalld/nftables 持久配置。
三、Windows 完整操作(路由 + Windows 高级防火墙)
Windows IP 转发(IPEnableRouter)修改注册表后必须重启生效
操作 1:开启跨网卡转发
- 开启系统 IP 转发
reg add HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters /v IPEnableRouter /t REG_DWORD /d 1 /f重启电脑
- 防火墙放行转发流量 Windows 防火墙默认不会阻止转发流量; 如果开启高级筛选平台策略,需要手动允许 eth2 ↔ eth1 的转发报文。
操作 2:网卡流量隔离(双重防护)
2.1 关闭内核转发
reg add HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters /v IPEnableRouter /t REG_DWORD /d 0 /f重启电脑
2.2 防火墙兜底策略(防止人为误开启转发)
打开Windows Defender 防火墙 → 高级设置 → 连接安全规则 / 筛选平台使用【Windows 筛选平台】配置: 创建出站 / 入站转发过滤规则:
- 禁止:接口 eth2 接收的数据包 转发至 eth1
- 禁止:接口 eth1 接收的数据包 转发至 eth2
简易替代测试方案:使用 Wireshark 验证,不熟悉筛选平台可以优先依靠关闭 IP 转发实现隔离。
Windows 查看命令
route print tracert 192.168.10.11 reg query HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters /v IPEnableRouterWindows 路由配置复用
# 添加静态永久路由 route add 192.168.10.0 mask 255.255.255.0 192.168.11.11 -p route delete 192.168.10.0四、两种工作模式配置汇总表(设备 B)
模式 A:启用转发(C 可以访问 A)
- ip_forward = 1
- 路由配置完整(两端存在回程路由)
- 防火墙 FORWARD 链允许 eth1 ↔ eth2 流量
模式 B:网卡隔离(两张网段不能通过 B 互通)
- ip_forward = 0 (基础屏障)
- 防火墙 FORWARD 链双向阻断两张网卡转发流量(兜底防护)
- 不依靠路由表作为唯一隔离手段
五、重要补充知识点
防火墙 FORWARD 只管控跨网卡转发流量,无法管控本机程序主动访问举例: 在主机 B 上直接 ping A,属于 OUTPUT 流量;即使阻断 FORWARD,依然可以通。 ⚠️ 隔离两张网络 ≠ 禁止本机访问两个网段。
测试验证手段
- 转发是否生效:C ping A;tracert 查看路径经过 B
- 隔离是否生效:C 无法 ping 通 A;但 B 本机可以同时 ping 通 A、C
常见误区
- 只配置防火墙阻断转发,但是忘记关闭 ip_forward;存在配置失效风险;
- 认为隔离网卡 = 主机不能同时访问两个网段;概念错误: 隔离 =网段之间不能互相穿过主机转发,主机本身可以同时访问两边。
六、测试方案
- 开启转发模式:C ping A 通
- 切换隔离模式(关闭 ip_forward + 防火墙阻断转发):C ping A 不通;
- 在 B 本机分别 ping A、ping C,依然正常连通(用来区分【跨网卡转发】和【本机访问】)