更改 ifconfig 返回的 IP 地址的顺序?

更改 ifconfig 返回的 IP 地址的顺序?

我有一台 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:0venet0: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 的输出并将其重新排列成您想要的顺序吗?

相关内容