我有一台运行 Debian 的台式电脑,安装了两个网卡。一张网卡连接到安全的公司网络并需要静态 IP。另一个网卡 (eth1) 连接到 dlink 路由器,然后连接到具有 DHCP 寻址的电缆调制解调器。
我想创建一个脚本来在两个网络之间切换。我想确保两个网络没有同时连接。现在,我的脚本检查每个接口的打开/关闭状态,并使用 ifup/ifdown 切换它们。然而,我在尝试切换网络时遇到了许多问题,我将尝试概述这些问题,但我感觉我只是以错误的方式解决这个问题。
如果我配置 /etc/network/interfaces 以反映公司网络连接所需的静态 IP 设置和电缆连接所需的 DHCP,那么我会收到错误“RTNETLINK 答案:文件存在”,因为我在中定义了多个网关文件。
如果我通过“路由添加”定义网关并包含计量 ifup 将不会启动 eth0。如果我在接口文件中未定义 eth0 和 eth1 并使用网络管理器来管理它们,ifup 将不会启动任何一个接口。在这两种情况下,当我尝试使用 ifup 时,我都会收到错误“无法启动 eth#”(将 # 替换为 0 或 1),并且没有进一步的详细解释。
如果我将 ifup/ifdown 替换为“ifconfig eth# up/down”,则接口可以正常启动和关闭,但 resolv.conf 中的 DNS 设置不会更新,因此我无能为力。添加“resolvconf -u”似乎也不起作用。
如果我在切换后手动编辑 resolv.conf,我可以让任何网络上的一切正常工作,但我希望它尽可能自动化和简单。非常感谢您提供的任何帮助。
- -更新 - -
/etc/网络/接口
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 10.0.0.152
netmask 255.255.255.0
gateway 10.0.0.1
network 10.0.0.0
broadcast 10.0.0.255
dns-search company.com
dns-nameservers 10.0.0.2 10.0.0.3 10.0.0.4
meter 100 #without this line I get RNETLINK answers: file does not exist
auto eth1
iface eth1 inet dhcp #assigns an address in the 192.168.0.0/24 space with 192.168.0.1 as DNS
meter 200 #without this line I get RNETLINK answers: file does not exist
/etc/resolv.conf
nameserver 10.0.0.2
nameserver 10.0.0.3
nameserver 10.0.0.4
search company.com cable.provider.com
除非我手动编辑该文件,否则我的 resolv.conf 始终具有 eth0 连接的 DNS 服务器以及搜索路径中的两个域。为了使电缆连接正常工作,我必须删除其他名称服务器线路并添加 192.168.0.1,为了使公司连接正常工作,我只需删除电缆提供商搜索路径。
答案1
DHCP 设置不应包含 中的网关地址/etc/network/interfaces
。例如,要在 eth0 上配置 DHCP,您只需要至少以下几行:
auto eth0
iface eth0 inet dhcp
一旦配置正确ifup
并且ifdown
应该正常工作,那么您可以在更改接口状态时放置任何想要运行的脚本/etc/network/if-up.d
& /etc/network/if-down.d
。但是,如果您的 DHCP 服务器设置正确,它应该向其客户端提供 DNS 配置,因此不需要手动配置它
编辑
要自动更改 DNS 设置,您需要向 中的每个相应接口添加必要的配置/etc/network/interfaces
,即使该接口使用 DHCP。当使用目录中的挂钩脚本调用&时,
DNS 设置/etc/network/interfaces
将被传递到。 resolvconf
ifup
ifdown
/etc/network/if-(up|down).d
当您使用它打开一个界面时,ifup
它的 DNS 设置会附加到/etc/resolv.conf
,这就是您所遇到的情况。相反,当使用 拆除界面时,相同的设置也会被删除ifdown
。但即使您使用ifdown
,如果没有静态 DNS 设置,/etc/network/interfaces
则该接口的设置也不会被删除/etc/resolv.conf
。
所以你的条目eth1
应该是这样的:
auto eth1
iface eth1 inet dhcp #assigns an address in the 192.168.0.0/24 space with 192.168.0.1 as DNS
metric 200 #without this line I get RNETLINK answers: file does not exist
dns-search cable.provider.com
此外,您可以使用&-v
选项来启用详细输出并准确查看正在执行的挂钩脚本。ifup
ifdown
资料来源:
man resolvconf
man interfaces