LVSの環境構築手順を見てると当たり前のようにVIPをループバックインターフェースへ割り当てているのを見て不思議に思ったので調べた。
ループバックインターフェースとは
ループバックアドレスとは、その機器自身を表す IP アドレスであるのに対して、ループバックインターフェースとはループバックアドレスがループバックインタフェースという論理インタフェースに紐づいたものを指す。
ip a
コマンドなんかでみることができる仮想インターフェースのこと
[root@localhost ~]# ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever
L2DSR
LVSを経由して流れたリクエストを、配下のサーバがMACアドレスを書き換えて直接クライアントに返す方式での負荷分散。
書き換えるのはIPではなくMacアドレスのところがポイント。(スライド32あたりを参照)
www.slideshare.net
リアルサーバはVIPをLoに設定と記載されている。ここで疑問に思うのがLoに設定されたIPアドレスに対してLVSから通信できるのはなぜだろうってお話。
結論
別のネットワークインターフェースに届いたパケットでも、自ホストが持つ IPアドレスのいずれかであればLinuxではパケットを受け取ることが可能だから。
そのために構築手順なんかではrp_filterの値を変更しているとのこと。なるほど。
Loに設定する理由としては同一ネットワークないでIP衝突を避けることが可能であるから(Loなので当然)
ちなみにクライアントから見える戻りのsrcIPはVIPとなって戻ってるため相手側としてはVIPへ送信してVIPで戻ってくるって流れで問題がない。(これはNATの場合はまた違う)