使用 Ubuntu 10.04 LTS 作为路由器连接两个子网

使用 Ubuntu 10.04 LTS 作为路由器连接两个子网

这个问题困扰了我好几天,

我有两个子网:

192.168.1.0/24 :这是我的 ISP/路由器使用的子网。WAN 网关是 192.168.1.1 192.168.2.0/24 :这是我在 ESXi 5 虚拟机上创建的子网。

运行 ESXi 5 的物理机有两个 NIC,一个 NIC 连接到我的 ISP/路由器,另一个 NIC 连接到另一个禁用了 DHCP 服务器的路由器。我使用第二个路由器只是为了从 vmware 的角度保持 NIC 状态为“UP”。

我有一个虚拟的 Ubuntu 10.04 LTS,上面连接了两个 NIC。这个想法是,它将充当两个子网之间的路由器。我在 Ubuntu 路由器上运行 DHCP,它使用 192.168.2.0 LAN 向我的虚拟机分配 IP。

我遇到的问题是,我似乎无法让 Ubuntu 路由器将数据包从一个子网转发到另一个子网。我应该注意,我已经尝试了我能想到的所有可能的配置设置组合。我当前的设置如下:

我已运行命令echo 1 > /proc/sys/net/ipv4/ip_forward来启用数据包转发。

我的防火墙如下所示:

root@gRouter:~# iptables -L
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

我的“/etc/network/interfaces”如下所示:

root@gRouter:~# cat /etc/network/interfaces

auto lo eth0 eth1
iface lo inet loopback

iface eth0 inet static
    address 192.168.1.105
    network 192.168.1.0
    netmask 255.255.255.0
    up ip route add 192.168.2.0/24 via 192.168.1.105


iface eth1 inet static
    address 192.168.2.2
    network 192.168.2.0
    netmask 255.255.255.0
    up ip route add 192.168.1.0/24 via 192.168.2.2

从这个双网卡路由器,我可以在 192.168.2.0 子网内的虚拟机之间 ping 通,也可以在 192.168.1.0 子网中的虚拟机和物理机之间 ping 通。但我无法从一个子网 ping 通另一个子网。

我的路线表如下所示:

root@gRouter:~# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.2.0     *               255.255.255.0   U     0      0        0 eth1
192.168.1.0     *               255.255.255.0   U     0      0        0 eth0

我的 arp 目前如下所示:

root@gRouter:~# arp -v
Address                  HWtype  HWaddress           Flags Mask            Iface
192.168.2.13             ether   00:0c:29:30:f4:d9   C                     eth1
192.168.2.10             ether   00:0c:29:bf:60:a3   C                     eth1
192.168.1.64             ether   38:59:f9:e7:a0:f5   C                     eth0
Entries: 3      Skipped: 0      Found: 3

当我尝试从子网 192.168.2.0 中的计算机 ping 到子网 192.168.1.0 中的计算机时,我立即收到错误消息“连接:网络不可达”

当我尝试从子网 192.168.1.0 中的一台机器 ping 到子网 192.168.2.0 中的一台机器时,第一次 ping 已启动,但它只是无限期挂起。

抱歉发了这么长的帖子,希望我提供了足够的信息。非常感谢您的帮助。

提前致谢。

答案1

您无法将数据包发送到执行路由的机器。每个网络上的机器都需要知道其网络上的路由器接口是其通往其他网络的网关。

最简单的方法是添加静态路由到每个网络的默认网关。例如,如果路由器是 192.168.1.10/24 和 192.168.2.20/24,并且两个网络的默认网关是 192.168.1.1 和 192.168.2.1,那么您需要添加以下两个静态路由:

1)在 192.168.1.1 上,您需要一条到 192.168.2.0/24 的路由,网关为 192.168.1.10

2)在 192.168.2.1 上,您需要一条到 192.168.1.0/24 的路由,网关为 192.168.2.20

这样,当任一网络上的机器将另一个网络的数据包发送到其默认网关时,默认网关就会知道将数据包发送到连接两个网络的路由器。

答案2

您需要建立适当的中继以将两个子网路由到一起。如果防火墙没有针对任一接口的接受、拒绝、丢弃数据包的规则,您当然无法在两个子网之间建立任何连接。

开始阅读一些 IPFW/IPTABLES 规则。

http://forum.codecall.net/topic/48557-help-with-iptables-2-nics-2-subnets/

相关内容