我有一个CentOS服务器,配置了4个连续的IP:
eth0 5.x.x.251
eth0:0 5.x.x.252
eth0:1 5.x.x.253
eth0:2 5.x.x.254
eth0 5.x.x.251
eth0:0 5.x.x.252
eth0:1 5.x.x.253
eth0:2 5.x.x.254
问题是所有流量都以eth0:0(5.x.x.252)作为源IP而不是eth0进入互联网.
#curl ifconfig.me
5.x.x.252
我该如何解决这个问题,以便所有流量都通过eth0流出,即我的主要IP?
PS:我的服务器是在Xen dom0上运行的VPS,后者在路由模式网络中配置.
提前致谢!
服务器配置
# ifconfig eth0 Link encap:Ethernet HWaddr 00:x:x:x:x:AE inet addr:5.x.x.251 Bcast:5.x.x.255 Mask:255.255.255.255 inet6 addr: fe80::x:x:x:x/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:14675569 errors:0 dropped:0 overruns:0 frame:0 TX packets:9463227 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:4122016502 (3.8 GiB) TX bytes:25959110751 (24.1 GiB) Interrupt:23 eth0:0 Link encap:Ethernet HWaddr 00:x:x:x:x:AE inet addr:5.x.x.252 Bcast:5.x.x.255 Mask:255.255.255.224 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 Interrupt:23 eth0:1 Link encap:Ethernet HWaddr 00:x:x:x:x:AE inet addr:5.x.x.253 Bcast:5.x.x.255 Mask:255.255.255.224 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 Interrupt:23 eth0:2 Link encap:Ethernet HWaddr 00:x:x:x:x:AE inet addr:5.x.x.254 Bcast:5.x.x.255 Mask:255.255.255.224 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 Interrupt:23
# cat /etc/hosts 127.0.0.1 localhost.localdomain localhost 5.x.x.251 [fqdn] [hostname]
# cat ifcfg-eth0 DEVICE=eth0 BOOTPROTO=static ONBOOT=yes IPADDR=5.x.x.251 NETMASK=255.255.255.224 SCOPE="peer 5.x.y.82"
# cat ifcfg-eth0:0 DEVICE=eth0:0 BOOTPROTO=static ONBOOT=yes IPADDR=5.x.x.252 NETMASK=255.255.255.224
# cat route-eth0 ADDRESS0=0.0.0.0 NETMASK0=0.0.0.0 GATEWAY0=5.x.y.82
# netstat -rn Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface 5.x.y.82 0.0.0.0 255.255.255.255 UH 0 0 0 eth0 5.x.x.224 0.0.0.0 255.255.255.224 U 0 0 0 eth0 169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0 0.0.0.0 5.x.y.82 0.0.0.0 UG 0 0 0 eth0
2012年8月29日更新
当我运行/etc/init.d/network restart时,我得到了一个RTNETLINK答案:文件存在错误,这让我相信使用默认网关有另一个到另一个网络的路由,如here所示.
# /etc/init.d/network restart Shutting down interface eth0: [ OK ] Shutting down loopback interface: [ OK ] Bringing up loopback interface: [ OK ] Bringing up interface eth0: RTNETLINK answers: File exists [ OK ]
可以肯定的是,当我第一次通过5.x.y.82 dev eth0删除ip route del default然后再次使用.251 IP添加它时,一切都按预期工作.
有没有办法将route del命令添加到ifcfg-eth0或route-eth0文件中?我可以看到这可以通过Debian(more info)上的pre-up ip addr del …来完成,但是CentOS呢?
解决方法
从
this document开始,至少在CentOS 5上,我怀疑上面你可以通过简单地给出正确的iproute2命令参数来指定你的路由. (请参阅有关IP命令参数格式的部分)
所以不要写像:
# route-eth0 ADDRESS0=0.0.0.0 NETMASK0=0.0.0.0 GATEWAY0=5.x.y.82
你可以有这样一个文件:
default via 5.x.y.82 dev eth0 src 5.x.x.251
我没有Redhat / Redhat派生的方块来测试.