質問: Linux 4.1.6-1-ARCH x86_64 GNU/Linux環境で下記LVSドキュメントに掲示されたLocalNodeの例がうまく動作しないようです。 9.4. Testing LocalNode 手元の環境でrealserverのアドレスにloopbackアドレス127.0.0.1を指定しても、LocalNodeとして認識されない。 ``` $ sudo ipvsadm -Ln IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 172.20.10.5:8090 rr -> 127.0.0.1:8090 Route 1 0 0 ``` ↑ Localにならない 最近のカーネルに組み込まれたlvsにLocalNode機能が取り除かれたでしょうか?
回答: linux-2.6.32 と linux-4.1.6 を比較すると、 linux-2.6.32/net/netfilter/ipvs/ip_vs_ctl.c::__ip_vs_update_dest() でローカルアドレスの場合に conn_flags に IP_VS_CONN_F_LOCALNODE をセットする箇所が、linux-4.1.6 ではなくなっています。 IP_VS_CONN_F_LOCALNODE がセットされないと net/netfilter/ipvs/ip_vs_xmit.c::ip_vs_null_xmit() が使われないのですが、替わりに ip_vs_dr_xmit() の方でローカルアドレスの場合に ip_vs_null_xmit() と同様の処理をするようになっています。 変更された理由についてはわかりませんが、おそらく、設定時に IP_VS_CONN_F_LOCALNODE がセットされてそのまま、という仕様では不具合があって、実際の動作時にローカルアドレスかどうかを都度判定するようにしたのではないでしょうか。