我有一台 Ubuntu 服务器,上面有多个 IP 地址。127.0.0.1 在 ifconfig 中被列为 venet0。我正在使用厨师配置服务器。问题是 chef 将 127.0.0.1 列为服务器的 IP 地址,而不是服务器的“真实”IP 之一。(显然“ohai ipaddress”使用 ifconfig 列出的第一个 IP 来确定服务器的 IP)。
我怎样才能更改顺序,以便首先列出服务器的主 IP 而不是 127.0.0.1?
由于 127.0.0.1 已经在“lo”接口中列出,是否可以删除 venet0 并将 venet0:0“提升”来取代它?
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:334 errors:0 dropped:0 overruns:0 frame:0
TX packets:334 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:16700 (16.7 KB) TX bytes:16700 (16.7 KB)
venet0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:127.0.0.1 P-t-P:127.0.0.1 Bcast:0.0.0.0 Mask:255.255.255.255
UP BROADCAST POINTOPOINT RUNNING NOARP MTU:1500 Metric:1
RX packets:7622207 errors:0 dropped:0 overruns:0 frame:0
TX packets:8183436 errors:0 dropped:1 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:2102750761 (2.1 GB) TX bytes:2795213667 (2.7 GB)
venet0:0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:XXX.XXX.XXX.XX1 P-t-P:XXX.XXX.XXX.XX1 Bcast:0.0.0.0 Mask:255.255.255.255
UP BROADCAST POINTOPOINT RUNNING NOARP MTU:1500 Metric:1
venet0:1 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:XXX.XXX.XXX.XX2 P-t-P:XXX.XXX.XXX.XX2 Bcast:0.0.0.0 Mask:255.255.255.255
UP BROADCAST POINTOPOINT RUNNING NOARP MTU:1500 Metric:1
路线-n
route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.0.2.1 0.0.0.0 255.255.255.255 UH 0 0 0 venet0
0.0.0.0 192.0.2.1 0.0.0.0 UG 0 0 0 venet0
答案1
ohai
通过查找您的默认网关(目的地 0.0.0.0)来route
查找“默认接口”:
network[:default_interface] = from("route -n \| grep -m 1 ^0.0.0.0 \| awk \'{print \$8\}\'")
(从截至目前为 21 行)
问题是它route
不关心接口上的别名(venet0:0
和venet0:1
是接口的别名venet0
),它假设通过别名发送的任何东西都从同一个设备发出,因此它被列为venet0
传出接口。当接口是物理接口时,这是合乎逻辑的,但当它是虚拟接口时,它可能是错误的(并且是在这种情况下是错误的)。由于这种行为,从技术上讲,ohai 依赖它来确定要使用的“正确”IP 地址也是错误的,即使基本 IP 地址不是 127.0.0.1。
理想的解决方法是重新配置网络设置,使非别名的 venet0 接口成为您的“主 IP”。如果您出于某种原因确实需要 venet0 为 127.0.0.1(我不熟悉 venet* 接口,所以我不知道为什么您这样设置,或者如果 venet0 是主 IP 地址而不是 127.0.0.1 会发生什么),那么您可以尝试找到该 network.rb 文件(/usr/lib/ruby/1.8/ohai/plugins/linux/network.rb
在清醒)并将其编辑为
network[:default_interface] = "venet0:0"
(或者您希望它报告为正确地址的任何接口)。我不知道 from() 是否会删除命令末尾打印的换行符,因此可能需要这样做才能"venet0:0\n"
使 ohai 正常工作。请注意,当您升级它所在的包时,这将被替换。
ip route list
我个人很好奇(从软件包中)是否iproute
显示使用 venet0 接口或 venet0:0 接口的“默认”路由。同样,netstat -r
。如果显示 venet0:0,那么您可以在错误报告中向 ohai 建议他们先尝试这些命令,如果不起作用,再尝试使用“正常”路由命令。
答案2
我不知道有什么办法可以做到这一点,除非你直接移除你的环回设备。不是想多管闲事,但它们的顺序有什么关系呢?
答案3
您可以通过重新排列 中的条目来改变现状/etc/udev/rules.d/70-persistent-net.rules
。
如果那里没有任何条目,您可以尝试添加自己的条目。这是一个例子:
# PCI device 0xXXXX:0xXXXX (XXXX)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:00:00:00:00:00", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
答案4
这可能只是巧合,但在我看来它是按接口名称的字母数字顺序排序的。我在我的 Linux 机器上也看到了同样的事情。
我对 Chef 一无所知,但您可以通过脚本传输 ifconfig 的输出并将其重新排列成您想要的顺序吗?