Ubuntu 作为路由器/网关 - 无法访问 WAN

Ubuntu 作为路由器/网关 - 无法访问 WAN

我目前正在尝试使用运行 Ubuntu 12.04 的机器设置家用路由器。该机器有两个以太网端口。eth0 是 LAN,eth1 是 WAN。

我已将 eth0 设置为静态 IP,并让 eth1 通过 DHCP 请求 IP。

/etc/network/interface

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
  address 10.1.1.10
  netmask 255.255.255.0
  gateway 10.1.1.10
  dns-nameservers 10.1.1.1 10.1.1.10

auto eth1
iface eth1 inet dhcp

这样我就可以 ping 局域网计算机,但无法 ping 或访问任何外部主机。调制解调器为 eth1 提供了一个有效的 IP 地址。机器将其 LAN IP 设置为 10.1.1.10(当一切正常时将移动到 10.1.1.1)。

我已将以下内容添加到/etc/bind/named.conf.options

    forwarders {
            8.8.8.8;
            8.8.4.4;
    };

网.ipv4.ip_forward=1已添加到/etc/sysctl.conf

$ route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         Vanir.local     0.0.0.0         UG    100    0        0 eth0
10.1.1.0        *               255.255.255.0   U     0      0        0 eth0
98.162.168.0    *               255.255.252.0   U     0      0        0 eth1
link-local      *               255.255.0.0     U     1000   0        0 eth0

是否有人看到我为了允许我的机器上进行 WAN 和 LAN 流量而缺少了什么?

答案1

我能够通过编辑来解决这个问题/etc/udev/rules.d/70-persistent-net.rules。通过将 eth0 设为我的 WAN NIC,linux 会自动使用它的网关作为默认网关。

/etc/udev/rules.d/70-persittent-net.rules

# This file was automatically generated by the /lib/udev/write_net_rules
# program, run by the persistent-net-generator.rules rules file.
#
# You can modify it, as long as you keep each rule on a single
# line, and change only the value of the NAME= key.

# PCI device 0x10ec:/sys/devices/pci0000:00/0000:00:1c.4/0000:03:00.0 (r8169)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="FF:FF:FF:FF:FF:F0", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"

# PCI device 0x10ec:/sys/devices/pci0000:00/0000:00:1c.5/0000:04:00.0/0000:05:01.0 (r8169)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="FF:FF:FF:FF:FF:F1", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"

# PCI device 0x10ec:0x8169 (r8169)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="FF:FF:FF:FF:FF:F2", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth2"

答案2

尽管您可能已经通过重新排序接口解决了这个问题,但这并不是问题的真正根源。

问题的真正根源是这样的:

自动 eth0
iface eth0 inet 静态
  地址 10.1.1.10
  网络掩码 255.255.255.0
  网关 10.1.1.10
  dns 名称服务器 10.1.1.1 10.1.1.10

这里您说的是,如果您有一个数据包要发送到某个不在 10.1.1.0/24 子网上的实体,则应将其发送到 10.1.1.10,后者知道如何处理它。但 10.1.1.10 是本地计算机。该数据包的目的地不是这台计算机,因此它会查找其路由表,并决定将数据包转发到 10.1.1.10... 这是一个路由循环在一台计算机上。

如果您家中只有一台路由器(很可能),则本地接口不应定义任何网关,因为子网内的所有 IP 都可以在本地访问。如果您家中有多个路由器,则应设置具体的路由到这些路由器处理的网络。只有当您实际上有两条不同的互联网路由时,使用两条默认路由才有意义。

在您的设置中,仅有的指向互联网的接口应该定义一个默认网关。因此,配置应该是

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
  address 10.1.1.10
  netmask 255.255.255.0
  dns-nameservers 10.1.1.1 10.1.1.10

auto eth1
iface eth1 inet dhcp

这一定会起作用。

如果您家里有多个路由器,这可能是因为家庭实验室或类似的东西,并且您可能会使用路由协议来处理它,但它可以通过例如静态配置post-up route add 192.168.1.0/24 gw 10.1.1.20

路线大致按照以下顺序应用。

  1. 本地可达 - 可以直接到达的地址优于必须通过路由器的任何地址。
  2. 较轻的路线胜过较重的路线。
  3. 更具体的路线优于不太具体的路线。
  4. 较高带宽接口优于较低带宽接口。

在这种情况下,两个网关都是默认网关(例如 0.0.0.0/0,尽可能不具体)。路由权重可由用户指定,在这种情况下,两个网关的权重均为 0(metric)。

简而言之,除了顺序之外,这两条路线完全相同。因此,第一个路线获胜,而在您的情况下,这形成了路线循环。

重新排序接口对您有用,这纯属巧合,可能是由于路由表的排序。您的配置仍然错误。

相关内容