ふたつの川うるおう日記
2007-02-25 (Sun)
_ [Server][Admin] LVS + keepalived + VRRP + DSR環境を構築する際のRed Hat Enterprise Linux/CentOSでのネットワーク周りの便利な設定方法
KlabのDSAS開発者さんのパソコン1台ではじめるロードバランサ体験は基本的にDebianをターゲットにされているため、Red Hat Enterprise Linux/CentOSで構築する場合固有の便利な設定方法が書かれていないのでそれを紹介したいと思います。既にDSAS開発者さんの手順で環境を作ったことがある人向けです。ここで紹介する方法で設定をしておけば、OS再起動後やネットワーク再起動も自動的に停止前と同じ状態になります。肝は/etc/rc.localを使わないこと。
- 上位ルータでの静的ルーティング設定
- 上位ルータがハードのスイッチではない + Red Hat Enterprise Linux/CentOSで、eth1を経由して10.10.31.0/24のサブネットに接続している場合。
- Red Hat Enterprise Linux/CentOSの場合、/etc/sysconfig/network-scripts/route-DEVICE名のファイルに静的ルーティングを書いておくと、/etc/init.d/network start時に記載した静的ルーティングが自動設定されます。手動や/etc/rc.localでroute addしてから/etc/init.d/network restartすると、それらの静的ルーティング設定は消えてしまうのでこの設定ファイルに書いておくのが安全です。
- route add -host 10.10.31.100 gw 10.10.31.10 の代わりの例。
cat << 'HERE_EOF' > /etc/sysconfig/network-scripts/route-eth1 GATEWAY0=10.10.31.11 NETMASK0=255.255.255.255 ADDRESS0=10.10.31.100 HERE_EOF
- lv1,lv2,w101,w102のためのファイアウォール設定
- Red Hat Enterprise Linux/CentOSの場合、ファイアウォールの設定は /etc/sysconfig/iptables に記載するのが推奨されています。ここに書いておいたルールは /etc/init.d/iptables start/save時に読み書きされます。
- lv1,lv2用/etc/sysconfig/iptables
## mangle *mangle :PREROUTING ACCEPT [0:0] :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] :POSTROUTING ACCEPT [0:0] -A PREROUTING -d 10.10.31.100/32 -j MARK --set-mark 1 COMMIT ## filter *filter ... 省略 ...
- w101,w102用/etc/sysconfig/iptables
## nat *nat :PREROUTING ACCEPT [0:0] :OUTPUT ACCEPT [0:0] :POSTROUTING ACCEPT [0:0] -A PREROUTING -d 10.10.31.100/32 -j REDIRECT COMMIT ## filter *filter ... 省略 ...
filterルールは環境によって異なるので省略しますが、ちゃんと設定した方が良いです。OSインストール時にわざわざファイアウォールを無効にしているサーバが結構あるので危なくてしょうがない・・・。また、ネットで検索すると良く出てくる独自スクリプトを組むのも後から別の人が読むには判りにくいので、公式に提供されている手段で書いておいた方が良いです。あと、chainでネットワーク定義して書きましょう。
- lv1,lv2のための送信元IPアドレスの偽造を許す設定
- eth1が対象。
echo >> /etc/sysctl.conf cat << 'HERE_EOF' >> /etc/sysctl.conf # echo 0 > /proc/sys/net/ipv4/conf/eth1/rp_filter net.ipv4.conf.eth1.rp_filter = 0 HERE_EOF
有効にする。
sysctl -p
- lv1,lv2のためのポリシールーティング設定
- Red Hat Enterprise Linux/CentOSの場合、/sbin/ifup-localという実行ファイルを用意しておくと、/etc/init.d/network start時にこの実行ファイルを実行してくれます。network-scriptsではポリシールーティング設定に対応した書式が提供されていないため、この実行ファイルから設定するようにしておきます。手動や/etc/rc.localでip rule addやip table addしてから/etc/init.d/network restartすると、静的ポリシールーティング設定は消えてしまうのでこの設定ファイルに書いておくのが安全です。
cat << 'HERE_EOF' > /etc/sysconfig/network-scripts/ifup-local
#!/bin/sh
#
# 適当な説明文
DEVICE="$1"
case "$DEVICE" in
lo)
# for LVS + VRRP + DSR
ip rule add prio 100 fwmark 1 table 100
ip route add local 0/0 dev lo table 100
;;
esac
HERE_EOF
実行権限を付与して、/sbin/ifup-localにシンボリックリンクを作成します。
chmod 700 /etc/sysconfig/network-scripts/ifup-local ln -s /etc/sysconfig/network-scripts/ifup-local /sbin/ifup-local
いきなし/sbin/ifup-localに実行ファイルを作らずに/etc/sysconfig/network-scripts/ifup-localに作る理由は、個人的に/usr, /bin, /sbin以下はバイナリファイル置き場で、バックアップ不要領域であり、通常バックアップを取らないためです。バックアップ対象だと思う領域は主に次の領域です。
- /etc 以下
- /home 以下
- /var 以下
というわけで、LVS + keepalived + VRRP + DSR環境を構築する際のRed Hat Enterprise Linux/CentOSでのネットワーク周りの便利な設定方法の紹介でした。


