毎度お世話になっています、伊藤です。

ルーティングデーモンと仮想IPアドレスを併用した時の
動きが妙な気がします。(routed 起動時に、自分の仮想アドレス
に対してアクセス出来ない、但し、他のマシンからは仮想アドレス
に対してアクセス出来る)


ちょっと長文で申し訳ありませんが、おつき合い頂ければと思います。

まず、最初は、ルーティングデーモンを未起動の状態です。
# pgrep routed

NICは、こんな感じです。
# ifconfig fxp0
fxp0: flags=88c3<UP,BROADCAST,RUNNING,NOARP,SIMPLEX,MULTICAST> mtu 1500
        options=b<RXCSUM,TXCSUM,VLAN_MTU>
        inet6 fe80::208:dff:fe87:be0d%fxp0 prefixlen 64 scopeid 0x1
        inet 192.168.1.1 netmask 0xffffff00 broadcast 192.168.1.255
        ether aa:bb:cc:dd:ee:ff
        media: Ethernet autoselect (100baseTX <full-duplex>)
        status: active

ルーティング情報は、こんな感じです。

# netstat -rn
192.168.1          link#1             UC          0        0   fxp0
192.168.1.1        00:08:0d:87:be:0d  UHLW        1        2    lo0


次に、routed を -q オプションを付けて起動し、 fxp0 にもう1つアドレスを
振ります。

# routed -q
# ifconfig fxp0 192.168.1.2 netmask 255.255.255.255 alias

すると、コンソールに、

arp_rtrequest: bad gateway 192.168.1.2 (!AF_LINK)

というメッセージが出力され、ルーティング情報は、

# netstat -rn
192.168.1          link#1             UC          0        0   fxp0
192.168.1.1        00:08:0d:87:be:0d  UHLW        1        2    lo0
192.168.1.2        192.168.1.2        UH          0        0   fxp0 =>
192.168.1.2/32     link#1             UC          0        0   fxp0

となります。

この状態で、192.168.1.2 に ping を打つと、自分自身に対して ping
しているにも関わらず、

# ping 192.168.1.2
PING 192.168.1.2 (192.168.1.2): 56 data bytes
ping: sendto: Invalid argument

となり、コンソールには、

arplookup 192.168.1.2 failed: could not allocate llinfo
arpresolve: can't allocate route for 192.168.1.2

というメッセージが出力されます。
面白いことに、この状態で他のマシンから 192.168.1.2 に ping を打つと
ちゃんと応答を返します。
つまり、自分自身の仮想アドレスに自分自身のみが接続出来ないという
状態になっています。

routed を起動しない状態で同じことをすると、
ルーティング情報は、

192.168.1          link#1             UC          0        0   fxp0
192.168.1.1        00:08:0d:87:be:0d  UHLW        1        2    lo0
192.168.1.2        00:08:0d:87:be:0d  UHLW        1        2    lo0 =>
192.168.1.2/32     link#1             UC          0        0   fxp0

となり、自分自身からも、他のマシンからも192.168.1.2 へのping には
応答します。

ルーティング情報を route コマンドで削除すると、直後は ping OK と
なるのですが、暫くするとrouted がルーティング情報を追加して来る
為、また ping に応答しなくなってしまいます。

いくつかのマシンで試して見たのですが、
5.5R は、NG
CURRENTは、NG
5.1R は、OK
という結果でした。

ルーティングデーモンと、仮想アドレスを併用したいのですが、
私の手順の何が間違っているのでしょうか?

メールによる返信