増田です。

> # 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
> 
> となります。

アドレスを追加してからroutedを起動するとどうなりますか?
routed がアドレスの追加を見てなんかパケットを(loかfxpか知りませんが)に
送ってるんではと想像。

> この状態で、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


そりゃそうです。192.168.1.2->192.168.1.2->....とループしてしまいますから。

> となり、コンソールには、
> 
> 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.2宛のarpテーブルが出来てるでしょうから。
(これは、他の設定か、単にひとつのarpセグメントにいるからかも)

解決の参考にはならないかもしれませんが、考え方の参考まで。



> つまり、自分自身の仮想アドレスに自分自身のみが接続出来ないという
> 状態になっています。
> 
> 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
> という結果でした。
> 
> ルーティングデーモンと、仮想アドレスを併用したいのですが、
> 私の手順の何が間違っているのでしょうか?
> 
> 

メールによる返信