如何路由 3 个 NIC 和 3 个子网

如何路由 3 个 NIC 和 3 个子网

我正在尝试使用具有 3 个 NIC 的 Ubuntu 12.10 服务器在 3 个子网之间设置路由。我希望能够让所有这些子网相互路由,并能够访问互联网。

10.0.2.0 网络连接到互联网。连接到互联网的 Netgear 路由器盒的地址为 10.0.2.1。

这三个子网分别是 10.0.2.0/16、10.100.0.0/16 和 10.101.0.0/16。

我尝试设置 /etc/network/interfaces 来定义 NIC 和路由,但似乎不起作用。我可以从任何相应子网上的任何计算机 ping ubuntu 服务器上的所有 NIC,但我无法从任何子网 ping 不同子网上的任何系统。我也无法从子网访问互联网。

# /etc/network/interfaces

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
# eth0
auto eth0
allow-hotplug eth0
iface eth0 inet static
        address 10.0.2.154
        netmask 255.255.0.0
        gateway 10.0.2.1
        dns-nameservers 10.0.2.100 8.8.8.8

# eth1
auto eth1
allow-hotplug eth1
iface eth1 inet static
        address 10.100.0.4
        netmask 255.255.0.0
        dns-nameservers 10.0.2.100 8.8.8.8

# eth2
auto eth2
allow-hotplug eth2
iface eth2 inet static
        address 10.101.0.1
        netmask 255.255.0.0
        dns-nameservers 10.0.2.100 8.8.8.8

up route add -net 10.0.0.0 netmask 255.255.0.0 gw 10.0.2.1 dev eth0
up route add -net 10.100.0.0 netmask 255.255.0.0 gw 10.0.2.154 dev eth0
up route add -net 10.101.0.0 netmask 255.255.0.0 gw 10.0.2.154 dev eth0
up route add -net 10.101.0.0 netmask 255.255.0.0 gw 10.100.0.4 dev eth1
up route add -net 10.0.0.0 netmask 255.255.0.0 gw 10.100.0.4 dev eth1
up route add -net 10.100.0.0 netmask 255.255.0.0 gw 10.101.0.1 dev eth2
up route add -net 10.0.0.0 netmask 255.255.0.0 gw 10.101.0.1 dev eth2

我很乐意听取有关如何修复我的 /etc/network/interfaces 文件以便在这些子网之间正确路由的任何建议。

答案1

无需在路由器上添加路由。它们已经作为本地接口直接连接到那里了!您可以通过运行来查看route -n。例如:

route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.25.1    0.0.0.0         UG    0      0        0 wlan0   # def.gw
169.254.0.0     0.0.0.0         255.255.0.0     U     1000   0        0 wlan0   # zeroconf
192.168.0.0     192.168.25.254  255.255.255.0   UG    0      0        0 wlan0   # route
192.168.11.0    0.0.0.0         255.255.255.0   U     0      0        0 testvpn # interf.
192.168.25.0    0.0.0.0         255.255.255.0   U     2      0        0 wlan0   # interf.
192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0  # interf.

我在这里手动添加的实际路线已用 标记# route。您会注意到,这些线路也用 标记列出G!没有该标记的线路只是本地线路,可直接使用。

您唯一需要启用的是 IPv4 转发。

sudo sysctl -w net.ipv4.ip_forward=1

并通过将此行放入/etc/sysctl.d/10-routing.conf(您可以编一个名字)文件中来永久启用它:

net.ipv4.ip_forward=1

从这里,您必须将这些路由告知网络中的主机。因此,10.100.0.0/16例如,在一台机器上,您需要添加如下路由:

# On a client somewhere in 10.100.0.0
auto eth0
iface eth0 inet static
  address 10.100.0.123
  netmask 255.255.0.0
  # route 10.0.0.0/16 via 10.100.0.4
  up route add -net 10.0.0.0 netmask 255.255.0.0 gw 10.100.0.4
  # route 10.101.0.0/16 via 10.101.0.1
  up route add -net 10.101.0.0 netmask 255.255.0.0 gw 10.101.0.1

公布这些路由的更好方法是使用 DHCP 通知它们,或者使用 使其成为默认网关gateway。或者,使用“真实”路由协议,例如 OSPF、RIP 等。


顺便说一句,你/etc/network/interfaces文件中的语法是错误的。up条目应该是列出的每个单独接口的一部分,用空格缩进,例如address条目。

答案2

以下是我最终解决路由问题的方案,供大家参考。下面是我最终得到的 /etc/network/interfaces、/etc/iptables.rules 和 /etc/sysctl.d/10-routing.conf 文件。

事实证明我需要从我的 /etc/network/interfaces 文件中删除路由命令,然后设置 ipforwarding。

=========================================
/etc/network/interfaces

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
# eth0
auto eth0
allow-hotplug eth0
iface eth0 inet static
        address 10.0.2.154
        netmask 255.255.0.0
        gateway 10.0.2.1
        dns-nameservers 10.0.2.100 8.8.8.8
        pre-up iptables-restore < /etc/iptables.rules

# eth1
auto eth1
allow-hotplug eth1
iface eth1 inet static
        address 10.100.0.4
        netmask 255.255.0.0
        dns-nameservers 10.0.2.100 8.8.8.8

# eth2
auto eth2
allow-hotplug eth2
iface eth2 inet static
        address 10.101.0.1
        netmask 255.255.0.0
        dns-nameservers 10.0.2.100 8.8.8.8

=================================================

/etc/iptables.rules

# Generated by iptables-save v1.4.12 on Fri Feb  1 20:43:36 2013
*nat
:PREROUTING ACCEPT [204:18924]
:INPUT ACCEPT [35:6098]
:OUTPUT ACCEPT [3:164]
:POSTROUTING ACCEPT [1:40]
-A POSTROUTING -o eth0 -j SNAT --to-source 10.0.2.154
COMMIT
# Completed on Fri Feb  1 20:43:36 2013

=================================================

/etc/sysctl.d/10-routing.conf

net.ipv4.ip_forward=1

相关内容