我有 Ubuntu 13.10,Saucy Salamander x64 作为 VirtualBox 中的客户机运行(Windows 7 作为主机)。
我写这个是/etc/network/interfaces
因为我需要添加大量永久的、手动的静态路由:
# interfaces(5) file used by ifup(8) and ifdown(8)
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp
auto eth1
iface eth1 inet dhcp
up ip -force -b /etc/network/eth1-routes
eth1-routes
包含几行如下格式的行:
route add 10.0.0.0/8 via 172.x.x.x dev eth1
172.x.x.x
VBox NAT 给我的网关在哪里。
通过运行,netstat -nr
看起来我的所有手动路由都已成功添加,包括通过 到达两个 DNS 服务器的路由172.x.x.x
。
但是,网络管理器显示两个设备都“未受管理”。如果我设置/etc/NetworkManager/NetworkManager.conf
managed=true
,网络管理器会再次工作,但我的路由会丢失。所以我目前的折衷方案是设置managed=false
并注释掉eth0
中的行/etc/network/interfaces
。
有没有办法可以管理设备并仍执行如上所述的手动路线?
答案1
网络管理器管理自己的静态路由 - 打开网络管理器并选择“有线连接 1”。选择编辑。选择 IPv4 选项卡。此页面底部有一个“路由”按钮。您可以在此处添加它们。完成后,NM 会在其 /etc/NetworkManager/system-connections/ 目录中以 root 权限写入名为“有线连接 1”的文件
示例如下
ls -l /etc/NetworkManager/system-connections/
total 4.0K
-rw------- 1 root root 216 Aug 26 10:38 Wired connection 1
sudo cat /etc/NetworkManager/system-connections/Wired\ connection\ 1
[802-3-ethernet]
mac-address=A:Real:Mac:Add:re:ss
[connection]
id=Wired connection 1
uuid=df4491fc-0981-4071-82ae-04c7b2d6d9fc
type=802-3-ethernet
[ipv6]
method=auto
[ipv4]
method=auto
route1=10.2.2.0/24,10.1.1.68,1
其中 10.2.2.0 是目标网络,10.1.1.68 是网关。
答案2
网络管理器无法识别您在 中写入的语句/etc/network/interfaces
。
因此,您可以将脚本添加eth1-routes
为 Network Manager 的调度程序脚本/etc/network/if-up.d/
。每次接口启动时,它都会运行。也许您必须在脚本中编写一个“if 子句”,以便在eth1
启动时仅添加路由。如下所示:
if [ "$IFACE" == "eth1" ]; then
route add ...
route add ...
fi
答案3
如果您想向 Ubuntu 添加一条持续重启且不使用默认接口作为网关的路由,那么您可能需要向特定接口的 NetworkManager 配置文件中添加一条路由语句。
添加路线到/etc/NetworkManager/system-connections/“连接名称”通过将路由语句添加到配置文件中(假设为 IPv4)来配置配置文件。路由有四个部分;“第一个是目标 IPv4 网络或地址(网络字节顺序),第二个是目标网络或地址前缀(1 - 32),第三个是下一跳(网络字节顺序)(如果有),第四个是路由度量”。
[ipv4]
method=auto
route1=172.16.0.0/16,192.168.3.1,1
这相当于使用以下路由语句设置路由:
route add -net 172.16.0.0 netmask 255.255.0.0 gw 192.168.3.1
路由键名在 NetmorkManager 开发者文档的表 12 中定义。请参阅以下 URL 了解更多信息:https://developer.gnome.org/NetworkManager/0.9/ref-settings.html