我该如何让这个路由在两个子网之间工作?不确定我的网络是否过于复杂

我该如何让这个路由在两个子网之间工作?不确定我的网络是否过于复杂

我正在尝试操作 2 个子网,范围内的第一个子网192.168.0.0/24可以自由访问它想要的任何东西,包括第二个子网上的机器。范围内的第二个子网10.0.0.0/24仅限于仅有的能够访问外部世界。我不希望有源的机器10.0.0.0/24能够访问192.168.0.0/24范围内的机器,但我希望它能够到外面去。

除此之外,在该192.168.0.0/24范围内我还想要 2 个网关,第一个是默认网关(当前为 Ubuntu VM 的形式),它通过 vpn 路由流量,其地址为,192.168.0.250第二个网关(面向互联网的 TP-Link 无线路由器)位于192.168.0.1(也是该范围的 DHCP 和 DNS 服务器192.168.0.0/24

我还有第三个网关用于桥接两个子网,另一个带有 2 个 NICS 的 Ubuntu VM,第一个是192.168.0.251,第二个是10.0.0.1

现在我已经解释了我想要的网络,下面是我的设置和我所经历的情况:

192.168.0.250 上的 Ubuntu 虚拟机

路由表192.168.0.250如下:

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         10.8.0.1        128.0.0.0       UG    0      0        0 tun0
default         192.168.0.1     0.0.0.0         UG    0      0        0 eth0
10.0.0.0        192.168.0.251   255.255.255.0   UG    0      0        0 eth0
10.8.0.0        *               255.255.0.0     U     0      0        0 tun0
128.0.0.0       10.8.0.1        128.0.0.0       UG    0      0        0 tun0
192.168.0.0     *               255.255.255.0   U     0      0        0 eth0
.               192.168.0.1     255.255.255.255 UGH   0      0        0 eth0

我通过添加路线

 ip rule add from 192.168.0.0/24 table default
 ip route add 10.0.0.0/24 via 192.168.0.251
 ip rule add from 10.0.0.0/24 table sandboxgateway
 ip route add default via 192.168.0.1 dev eth0 table sandboxgateway

如果我删除这两sandboxgateway行,我可以访问10.0.0.1,但10.0.0.X范围内的任何东西都通过 VPN 访问互联网,这不是我想要的。它的 iptable 看起来像这样:

Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

192.168.0.251/10.0.0.1 上的 Ubuntu 虚拟机

路由表192.168.0.251(eth0)/10.0.0.1(eth1)如下:

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         192.168.0.1     255.255.255.255 UGH   0      0        0 eth0
default         192.168.0.250   0.0.0.0         UG    0      0        0 eth0
10.0.0.0        *               255.255.255.0   U     0      0        0 eth1
192.168.0.0     *               255.255.255.0   U     0      0        0 eth0

它的 iptable 如下所示:

Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
DROP       all  --  10.0.0.0/24          192.168.0.0/24

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

问题

我遇到的问题是,虽然我的机器在可以通过或作为网关192.168.0.2访问外部世界,我的机器在 也可以访问外部世界而无需访问 的任何内容,但我的机器在无法访问或,并且来自 Windows 命令提示符的结果是192.168.0.1192.168.0.25010.0.0.10192.168.0.X192.168.0.210.0.0.110.0.0.10tracert

跟踪到 10.0.0.1 的路由,最多 30 个跳数

  1    <1 ms    <1 ms    <1 ms  192.168.0.250
  2     *        *        *     Request timed out.
  3     *        *        *     Request timed out.

为什么192.168.0.250没有路由到192.168.0.251??

如果我提供的信息太多或太少,请原谅,请询问是否需要任何其他详细信息来回答这个问题。

答案1

iptables 数据包过滤器会丢弃 10.0.0.0/8 ips 到 192.168.0.0/8 IPs 的响应。在 DROP 规则之前添加一条规则,允许已建立的从 10.0 到 192.168 的数据包:

-A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

这应该可以解决问题。如果不行,请删除 DROP 规则以检查这是否真的是问题的根源。如果是,您可能需要构建更复杂的规则集。

相关内容