我使用 Ubuntu,并且我有很多接口。eth0
这是我的互联网连接,它从完全不受我控制的 DHCP 服务器获取信息。
然后我有eth1
、和eth2
,我已经为其创建了一个 DHCP 服务器。(ISC DHCP 服务器)eth3
eth4
它似乎起作用了,我甚至从面向互联网的接口上的外部 DHCP 服务器获取了一个 IP 地址。
但是,由于某种原因,在我为-eth0
安装本地 DHCP 服务器后,我的 网关似乎出问题了。(我之所以这么认为,是因为我获得了 的 IP ,而且我可以 ping 通本地网络上的其他东西,但却无法访问互联网)。eth1
eth4
eth0
我的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
。
- 您不应该让
gateway
指令指向自身。如果您的机器不知道将带有未知IP
地址的数据包发送到哪里,为什么要告诉它将该数据包转发给自己?所以您永远不应该将指令指向gateway
自身。 - 您的机器中应该只有一个(或没有)默认网关。并且该网关应该指向外部。通向外部的接口位于 上
eth0
,并且从 获得网关dhcp
。因此无需gateway
在此处设置。
因此,删除所有gateway
指令/e/n/interfaces
,它就会正常工作(更好)。
顺便说一句,network
和broadcast
都是根据address
和计算出来的netmask
,所以你不需要指定它们。如果你输入错误,实际上会产生一些奇怪的错误,所以你最好不要指定它们。参见https://askubuntu.com/a/432876/9993
对于您 LAN 中拥有自己的 dhcp 服务器的客户端,您应该告诉他们在 dhcp 服务器的配置中使用您的机器。因此,eth1
您应该告诉客户端将其用作10.0.1.1
路由器。您无法在 中执行此操作/e/n/interfaces
。