我正在尝试在 VirtualBox 中构建真实网络的原型。我有 3 个访客系统:
- 具有 3 个 NIC 的基于 Debian 的路由器:
- enp0s3 看起来很出众。(桥接)
- enp0s8 LAN1.(内部网络1的网关)
- enp0s9 LAN2.(内部网络2的网关)
- LAN1 中的 WinXP 工作站。
- LAN2 中的 WinXP 工作站。
net.ipv4.ip_forward=1
iptables 保存输出:
# Generated by iptables-save v1.6.0 on Thu Mar 21 01:18:29 2019
*filter
:INPUT DROP [31:8959]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -i enp0s8 -j ACCEPT
-A INPUT -i enp0s9 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 0 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 1 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 2 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 3 -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -m state --state INVALID -j DROP
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP
-A INPUT -p tcp -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -m state --state NEW -j DROP
-A INPUT -i enp0s3 -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -m state --state INVALID -j DROP
-A FORWARD -i enp0s8 -o enp0s3 -j ACCEPT
-A FORWARD -i enp0s9 -o enp0s3 -j ACCEPT
-A FORWARD -i enp0s3 -o enp0s8 -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -i enp0s3 -o enp0s9 -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -s 10.10.10.0/24 -d 10.10.11.0/24 -i enp0s8 -o enp0s9 -j ACCEPT
-A FORWARD -s 10.10.11.0/24 -d 10.10.10.0/24 -i enp0s9 -o enp0s8 -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -o enp0s8 -j ACCEPT
-A OUTPUT -o enp0s9 -j ACCEPT
-A OUTPUT -o enp0s3 -j ACCEPT
-A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -p tcp -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -m state --state NEW -j DROP
COMMIT
# Completed on Thu Mar 21 01:18:29 2019
# Generated by iptables-save v1.6.0 on Thu Mar 21 01:18:29 2019
*nat
:PREROUTING ACCEPT [77:16001]
:INPUT ACCEPT [2:628]
:OUTPUT ACCEPT [2:143]
:POSTROUTING ACCEPT [2:143]
-A POSTROUTING -s 10.10.10.0/24 -o enp0s3 -j MASQUERADE
-A POSTROUTING -s 10.10.11.0/24 -o enp0s3 -j MASQUERADE
COMMIT
# Completed on Thu Mar 21 01:18:29 2019
# Generated by iptables-save v1.6.0 on Thu Mar 21 01:18:29 2019
*mangle
:PREROUTING ACCEPT [224:28224]
:INPUT ACCEPT [180:21810]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [144:17877]
:POSTROUTING ACCEPT [144:17877]
COMMIT
# Completed on Thu Mar 21 01:18:29 2019
DNSmasq 充当 DHCP 服务器
问题是:我怎样才能使 LAN1 中的工作站看到 LAN2 中的工作站?两者都可以使用互联网,workstation1(10.100) 可以 ping 通 11.1 网关,但无法到达 11.100 机器,反之亦然。 iptables 不太可能是问题所在,因为它在统计数据中没有丢弃的包。有趣的是,tcpdump 显示每个 ping 请求有 2 个包,时间差为 0.0000 倍。
PS 如果可能的话,最好不要在客户端上添加静态路由。
答案1
我没有发现您的 iptables 配置有任何问题。这让我相信工作站上运行的防火墙正在阻止通信流。
请执行以下检查:
- 在工作站上
10.10.10.100
,运行ping -t 10.10.11.100
- 在路由器上,通过运行以下命令确保来自的 ICMP 数据包
10.10.10.100
到达输出接口tcpdump -i enp0s9 icmp and host 10.10.11.100
由于工作站10.10.11.100
可以访问互联网,我还建议您安装Wireshark 版本 1.10在上面 (最后一个支持Windows XP的分支)并检查数据包是否真正到达虚拟适配器。
答案2
很抱歉耽误您的时间,但原因很简单而且愚蠢:WinXP 防火墙开箱即用地切断 icmp 数据包。应该早点检查一下。谢谢大家的关注,下次会更加小心。