我有一个Ubuntu服务器连接了几个IP地址。 ifconfig将127.0.0.1列为venet0。 我正在使用Chef来configuration服务器。 问题是厨师将127.0.0.1列为服务器的IP地址,而不是服务器的“真实”IP地址之一。 (显然“ohai ipaddress”使用ifconfig列出的第一个IP来确定服务器的IP)。
如何更改订单,以便服务器主IP首先被列出而不是127.0.0.1?
可以删除venet0,并且venet0:0被“提升”取代它,因为127.0.0.1已经在“lo”界面中列出了吗?
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 PtP: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 PtP: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 PtP: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
ohai使用route通过查找您的默认网关(目的地0.0.0.0)find“默认界面”:
network[:default_interface] = from("route -n \| grep -m 1 ^0.0.0.0 \| awk \'{print \$8\}\'")
(从现在的21行开始 )
问题是, route不关心接口上的别名( venet0:0和venet0:1是venet0接口的别名),它假定通过别名发送的任何内容都会出去相同的设备,所以它列出venet0为传出界面。 当接口是物理接口时这是合乎逻辑的,但是当它是虚拟接口时,它可能是错误的(在这种情况下是错误的)。 由于这种行为,即使基本IP地址不是127.0.0.1,ohai依靠它来确定“正确的”IP地址也是错误的。
理想的解决scheme将是为您重新configuration您的networking设置,使无锯齿的venet0接口是您的“主要IP”。 如果你真的需要venet0为127.0.0.1出于某种原因(我不熟悉venet *接口,所以我不知道你为什么这样做,或者如果venet0是主要的IP地址,而不是127.0 .0.1),那么你可以尝试在Lucid中findnetwork.rb文件( /usr/lib/ruby/1.8/ohai/plugins/linux/network.rb )并编辑它以读取
network[:default_interface] = "venet0:0"
(或者您希望它报告为正确的地址的任何接口)。 我不知道是否从()剥离命令将在最后打印的换行符,因此可能需要"venet0:0\n"才能使ohai正常工作。 请注意,升级所在的软件包时将被replace。
我个人好奇ip route list (来自iproute包)使用venet0接口或venet0:0接口显示您的“默认”路由。 同样, netstat -r 。 如果显示venet0:0,那么你可能会build议在ohai的错误报告中,他们首先尝试这些命令,如果它们不起作用,请使用“正常”路由命令重试。
我不知道这样做的方法,除非你只是删除你的回路设备。 不要八卦,但为什么他们在什么顺序呢?
您可以通过重新整理/etc/udev/rules.d/70-persistent-net.rules条目来改变/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"
我发现奇怪和麻烦的是你有你的lo和你的虚拟接口venet0定义相同的IP地址。
我唯一的猜测就是为什么这样设置是因为你无法调用没有地址的接口,尽pipe这可能是用0.0.0.0的IP完成的。
在venet0上删除127.地址很可能会解决这个问题,并纠正一个潜在的安全/性能漏洞(相当确定厨师是足够聪明的不抓住你的环回地址)。
这可能不过是巧合,但它看起来像是按接口名称以字母顺序sorting。 我在Linux机器上看到了同样的情况。
我对厨师一无所知,但是你可以通过一个脚本来pipe理ifconfig的输出,这个脚本可以将它重新排列成你想要的任何顺序。