Ubuntu 上具有多个接口的 DHCP 服务器破坏了默认网关

Ubuntu 上具有多个接口的 DHCP 服务器破坏了默认网关

我使用 Ubuntu,并且我有很多接口。eth0这是我的互联网连接,它从完全不受我控制的 DHCP 服务器获取信息。

然后我有eth1、和eth2,我已经为其创建了一个 DHCP 服务器。(ISC DHCP 服务器)eth3eth4

它似乎起作用了,我甚至从面向互联网的接口上的外部 DHCP 服务器获取了一个 IP 地址。

但是,由于某种原因,在我为-eth0安装本地 DHCP 服务器后,我的 网关似乎出问题了。(我之所以这么认为,是因为我获得了 的 IP ,而且我可以 ping 通本地网络上的其他东西,但却无法访问互联网)。eth1eth4eth0

我的eth0具体信息/etc/network/interfaces

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp

auto eth1
iface eth1 inet static
  address 10.0.1.1
  netmask 255.255.255.0
  network 10.0.1.0
  broadcast 10.0.1.255
  gateway 10.0.1.1
  mtu 8192


auto eth2
iface eth2 inet static
  address 10.0.2.1
  netmask 255.255.255.0
  network 10.0.2.0
  broadcast 10.0.2.255
  gateway 10.0.2.1
  mtu 8192

我的/etc/default/isc-dhcp-server

INTERFACES="eth1 eth2 eth3 eth4"

eth0那么,为什么当我告诉本地 DHCP 服务器不要监听 时,它会弄乱 网关eth0?有人看到这个问题吗?或者我能做些什么来修复它?

问题似乎确实出在网关上。netstat -nr给出:

0.0.0.0 --- 10.X.X.X ---- 0.0.0.0 --- UG 0 0 0 eth3

应该是

0.0.0.0 129.2XX.X.X 0.0.0.0 UG 0 0 0 eth0

因此由于某种原因,我的本地 DHCP 服务器覆盖了我从网络 DHCP 获得的网关。

编辑:dhcp.conf看起来像这样(我只包含eth1子网的信息):

ddns-update-style none;

not authoritative;

subnet 10.0.1.0 netmask 255.255.255.0 { interface eth1; 
option domain-name "example.org"; 
option domain-name-servers ns1.example.org, 
ns2.example.org; 
default-lease-time 600; 
max-lease-time 7200;
range 10.0.1.10 10.0.1.100;
host camera1_1 { hardware ethernet 00:30:53:11:24:6E; fixed-address 10.0.1.10; }
host camera2_1 { hardware ethernet 00:30:53:10:16:70; fixed-address 10.0.1.11; } 
}

/etc/init.d/networking restart此外,如果我在终端中运行,网关似乎设置正确,但这对我没有帮助,我需要在启动时设置正确的网关,我宁愿找到问题的根源

答案1

我几乎不是这个主题的专家,但我怀疑由于 DHCP 数据包的广播特性,无论您配置了什么监听接口,您的本地 DHCP 服务器总是会回答本地发起的请求。

因此,我建议您尝试在 dhclient.conf 中简单地设置“拒绝”语句来拒绝来自本地服务器的提议:

reject 10.0.1.1;
reject 10.0.2.1;

(我只是猜测您可以使用多个拒绝语句,手册页不清楚。)

我还可以想到其他一些可以尝试的方法,但无论如何,我最初的假设可能是错误的。我总是发现这是一个诊断正在发生的事情的有用工具:

apt-get install dhcpdump
dhcpdump -i eth1

PS:如果您想让 eth0、eth1、eth2 等保持适当的分离,请考虑使用 VLAN 来隔离第 2 层的流量。

答案2

您的计算机上应该只有一个默认网关。它应该通向边界路由器或网络外的路由器。您可以随时使用它ip route list来查看您拥有哪些路由器。

eth1因此,您的和eht2节中实际上各有两个错误/e/n/interfaces

  1. 您不应该让gateway指令指向自身。如果您的机器不知道将带有未知IP地址的数据包发送到哪里,为什么要告诉它将该数据包转发给自己?所以您永远不应该将指令指向gateway自身。
  2. 您的机器中应该只有一个(或没有)默认网关。并且该网关应该指向外部。通向外部的接口位于 上eth0,并且从 获得网关dhcp。因此无需gateway在此处设置。

因此,删除所有gateway指令/e/n/interfaces,它就会正常工作(更好)。

顺便说一句,networkbroadcast都是根据address和计算出来的netmask,所以你不需要指定它们。如果你输入错误,实际上会产生一些奇怪的错误,所以你最好不要指定它们。参见https://askubuntu.com/a/432876/9993

对于您 LAN 中拥有自己的 dhcp 服务器的客户端,您应该告诉他们在 dhcp 服务器的配置中使用您的机器。因此,eth1您应该告诉客户端将其用作10.0.1.1路由器。您无法在 中执行此操作/e/n/interfaces

相关内容