我目前正在尝试使用运行 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
。
路线大致按照以下顺序应用。
- 本地可达 - 可以直接到达的地址优于必须通过路由器的任何地址。
- 较轻的路线胜过较重的路线。
- 更具体的路线优于不太具体的路线。
- 较高带宽接口优于较低带宽接口。
在这种情况下,两个网关都是默认网关(例如 0.0.0.0/0,尽可能不具体)。路由权重可由用户指定,在这种情况下,两个网关的权重均为 0(metric
)。
简而言之,除了顺序之外,这两条路线完全相同。因此,第一个路线获胜,而在您的情况下,这形成了路线循环。
重新排序接口对您有用,这纯属巧合,可能是由于路由表的排序。您的配置仍然错误。