そして、正しいものを選択させるにはどうすればいいですか?
これはすべて、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-route
src
パラメータは、source-ipのみを設定する必要がありますifこのルートが選択されます。しかし、このルートが選択された場合、ソースIPはとにかくそれです。
トラフィックが特定のエイリアスインターフェイスにルーティングされ、そのエイリアスに関連付けられたソースIPを指定するように思えます。現在、ルートテーブルはその要件を反映していません。おそらく、これを使って修正することができます:
ip route add <NET> dev <ALIAS_DEV> src <SRC_IP>