Linux

輔助 IP (eth0:0) 就像主伺服器 IP

  • September 5, 2012

我有一個 CentOS 伺服器,配置了 4 個連續 IP:

eth0 5.xx251

eth0:0 5.xx252

eth0:1 5.xx253

eth0:2 5.xx254

問題是所有流量都以 eth0:0 (5.xx252) 作為源 IP 而不是 eth0 傳到 Internet。

`# 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 answers: File exists錯誤,這讓我相信有另一條路由使用預設網關到另一個網路,如此處所示

# /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  ]

可以肯定的是,當我第一次刪除ip route del default via 5.x.y.82 dev eth0然後使用 .251 IP 再次添加它時,一切都按預期工作。

有沒有辦法向文件或文件添加route del命令?我可以看到這可以在 Debian 上完成(更多資訊),但是 CentOS 呢?ifcfg-eth0``route-eth0``pre-up ip addr del ...

這個文件看來,至少在 CentOS 5 上,我懷疑你可以通過簡單地給出正確的 iproute2 命令參數來指定你的路由。(見上一節IP Command Arguments Format

所以不要寫這樣的東西:

# 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 派生框。

如果別名 IP 地址不用作非本地目標的源地址,則它們不應與預設路由的目標位於同一子網中。所以將他們的網路遮罩更改為255.255.255.255並刪除他們的廣播地址。

引用自:https://serverfault.com/questions/422204