web-dev-qa-db-ja.com

Linuxが間違ったソースIPアドレスを選択する理由

そして、正しいものを選択させるにはどうすればいいですか?

これはすべて、OpenVZコンテナ内で行われます。

ホストは、Redhat/OpenVZカーネルを搭載したDebian/Wheezyです。

root@mycl2:~# uname -a
Linux mycl2 2.6.32-openvz-042stab081.5-AMD64 #1 SMP Mon Sep 30 16:40:27 MSK 2013 x86_64 GNU/Linux

コンテナーには2つの(仮想)ネットワークインターフェイスがあります。 1つはパブリックに、もう1つはプライベートアドレス空間にあります。

root@mycl2:~# ifconfig
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:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

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.2  P-t-P:127.0.0.2  Bcast:0.0.0.0  Mask:255.255.255.255
          UP BROADCAST POINTOPOINT RUNNING NOARP  MTU:1500  Metric:1
          RX packets:475 errors:0 dropped:0 overruns:0 frame:0
          TX packets:775 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:32059 (31.3 KiB)  TX bytes:56309 (54.9 KiB)

venet0:0  Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  
          inet addr:80.123.123.29  P-t-P:80.123.123.29  Bcast:80.123.123.29  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:10.0.1.29  P-t-P:10.0.1.29  Bcast:10.0.1.29  Mask:255.255.255.255
          UP BROADCAST POINTOPOINT RUNNING NOARP  MTU:1500  Metric:1

プライベートネットワークへのルートは手動で設定されます。

root@mycl2:~# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.0.0.0        0.0.0.0         255.0.0.0       U     0      0        0 venet0
0.0.0.0         0.0.0.0         0.0.0.0         U     0      0        0 venet0

プライベートネットワーク上の他のユーザーにpingするTringは、誤った送信元アドレスが選択される原因となります。

root@mycl2:~# ip route get 10.0.1.26
10.0.1.26 dev venet0  src 80.123.123.29 
    cache  mtu 1500 advmss 1460 hoplimit 64

これはなぜですか、どうすればよいですか?

編集:

(Joshuaに感謝)でルートを作成した場合

ip route add 10.0.0.0/8 dev venet0 src 10.0.1.29

それは働いています。しかし、man ip-routesrcパラメータは、source-ipのみを設定する必要がありますifこのルートが選択されます。しかし、このルートが選択された場合、ソースIPはとにかくそれです。

4
Scheintod

トラフィックが特定のエイリアスインターフェイスにルーティングされ、そのエイリアスに関連付けられたソースIPを指定するように思えます。現在、ルートテーブルはその要件を反映していません。おそらく、これを使って修正することができます:

ip route add <NET> dev <ALIAS_DEV> src <SRC_IP>
6
Joshua Miller