无法访问隔离网络上的计算机

无法访问隔离网络上的计算机

我在公司局域网上有一台 Windows 台式电脑,它有 2 个网卡,我在网络选项中选择了两个适配器并将它们桥接起来。我还有一台 Linux 电脑,它有 2 个网卡,我将第一台电脑配置为在公司局域网上获取 DHCP,将第二台电脑配置为在隔离网络上获取静态 IP。我修改了 Linux 电脑上的路由,这样公司局域网流量就会从第一台网卡 (eth0) 流出,而流向隔离网络的流量则会从第二台网卡 (eth1) 流出。这样我就可以在 Linux 电脑上访问这两个网络。

                  Windows               
            +-----------------+    
10.x.x.x <- | NIC1 -+         |                          Linux
            |       | bridged |              +----------------------------+
            | NIC2 -+         |<-->switch<-->| NIC1 (DHCP 10.x.x.x)       |
            +-----------------+              |                            |
                                             | NIC2 (static 192.168.1.50) |<----> 192.168.1.x
                                             +----------------------------+

但是我需要从 Windows PC 访问 192.168.1.x LAN 上的 Web 服务器,但我遇到了问题。我已将 Windows 设置为桥接连接,因此它就像一个普通交换机一样。我添加了一条到 Windows 的路由,以将 192.168.1.x 流量转发到 Linux NIC1。我可以使用 tethereal 看到 Linux NIC1 正在从 NIC1 上的 Windows 框接收 http 数据包。

现在我该如何将该流量路由到 NIC2,以便它继续进入 192.168.1.x 网络并能够接收响应?我认为我需要将 Linux 机器变成路由器。所以我尝试添加一些 iptables 规则:

 Chain INPUT (policy ACCEPT)
 target    prot opt source               destination
 ACCEPT    all  --  10.6.100.0/22        192.168.1.0/24
 ACCEPT    all  --  192.168.1.0/24       10.6.100.0/22

 Chain FORWARD (policy ACCEPT)
 target    prot opt source               destination
 ACCEPT    all  --  10.6.100.0/22        192.168.1.0/24   // (-o eth1)
 ACCEPT    all  --  192.168.1.0/24       10.6.100.0/22    // (-o eth0)

 Chain OUTPUT (policy ACCEPT)
 target    prot opt source               destination

我认为我做错了什么,因为当我使用 --verbose 运行 iptables 时,我看不到 INPUT 和 FORWARD 策略都没有处理任何数据包。

我还使用 ipconfig 在 eth0 和 eth1 上启用了混杂模式。

我希望它能与现有的硬件和拓扑配合使用。Windows PC 之所以能发挥作用,是因为我需要它来嗅探进入和离开隔离网络的流量,以便调试设备。

我怎样才能让它按我想要的方式工作?

答案1

我猜你确实忘记在 Linux 机器上激活 IP 转发了。你可以通过发出以下命令来检查

cat /proc/sys/net/ipv4/ip_forward

如果这给你一个‘0’,则 IP 转发已被禁用。要启用它,请发出以下命令:

echo 1 >/proc/sys/net/ipv4/ip_forward

请注意,这只会持续到您下次重新启动。如何使其持久取决于发行版。大多数发行版都有一个名为 /etc/sysctl.conf 的文件。如果此文件存在,请使用 vi 打开它并检查行

net.ipv4.ip_forward = 0

将 0 改为 1,很可能会在下次启动机器时启用 IP 转发。请务必在重启后进行检查。

关于你的 iptables 的注释:这些链具有以下含义:

  • INPUT 接收发往 Linux 机器本身的数据包(因此它看不到 Linux 机器转发的数据包
  • FORWARD 接收 Linux 机器转发到其他系统的数据包 - 因此它不会看到发往 Linux 机器本身的数据包
  • OUTPUT 仅由来自 Linux 机器本身的数据包传递(例如由本地运行的进程生成,如 ping 命令等)

相关内容