IPv4でWANロードバランシングルータをマーキングをつかいDebian10/Busterにて設定してみました。構成は以下の通りです。なお、冗長構成は今回含んでいませんのであらかじめご了承ください。
早速、構成ですが、クライアントマシンがenp3s0に対してipv6とipv4で接続できていること、フォワードができていることが前提ですが、ここでは割愛します。
まずはネットワークインターフェースの設定をしておきます。
続いてiptablesの設定です。なお、iptablesの設定保持にiptables-persistentパッケージを予めインストールしてきます。
以上、マーキングを使った冗長構成なしのIPv4でのWAN Load balancingでした。ではまた。
早速、構成ですが、クライアントマシンがenp3s0に対してipv6とipv4で接続できていること、フォワードができていることが前提ですが、ここでは割愛します。
まずはネットワークインターフェースの設定をしておきます。
#/etc/network/interfaces.d/enp3s0 auto enp3s0 iface enp3s0 inet static address 192.168.255.23 netmask 255.255.255.0 iface enp3s0 inet6 static address fd5b:1234:5678:1350::23/60 #/etc/network/interfaces.d/enp1s0f0 auto enp1s0f0 iface enp1s0f0 inet static address 192.168.1.201 netmask 255.255.255.0 iface enp1s0f0 inet6 static address 240d:8765:4321:1351::23/64 #/etc/network/interfaces.d/enp1s0f1 auto enp1s0f1 iface enp1s0f1 inet static address 192.168.1.202 netmask 255.255.255.0 iface enp1s0f1 inet6 static address 240d:8765:4321:1352::23/64見てわかるように、どのインターフェースでもgatewayの設定はここでは行いません。gatewayの設定+αはこちらで行います。自動実行されるようにchmod +xしておいてください。
#/etc/network/if-up.d/0000-v4-lb #!/bin/sh ip route add default proto static metric 20 \ nexthop via 192.168.1.2 dev enp1s0f0 weight 1 \ nexthop via 192.168.1.4 dev enp1s0f1 weight 1 ip route add default via 192.168.1.2 dev enp1s0f0 table 201 ip route add default via 192.168.1.4 dev enp1s0f1 table 202 ip rule add from all fwmark 0xc9 table 201 ip rule add from all fwmark 0xca table 202最初の部分が、Weighted ECMPです。今回は回線の理論最大速度が同じなので、weight値を1と1で等価にしておきます。つづいて、真ん中と下のほうは、fwmarkによって使用するテーブルを設定しています。
続いてiptablesの設定です。なお、iptablesの設定保持にiptables-persistentパッケージを予めインストールしてきます。
iptables -t nat -N PRE_SNAT_HOOK iptables -t nat -N WANLOADBALANCE iptables -t nat -A POSTROUTING -j PRE_SNAT_HOOK iptables -t nat -A POSTROUTING -s 192.168.255.0/24 -o enp1s0f0 -m comment --comment SRC-NAT-201 -j MASQUERADE iptables -t nat -A POSTROUTING -s 192.168.255.0/24 -o enp1s0f1 -m comment --comment SRC-NAT-202 -j MASQUERADE iptables -t nat -A PRE_SNAT_HOOK -j WANLOADBALANCE iptables -t nat -A WANLOADBALANCE -m connmark --mark 0xc9 -j SNAT --to-source 192.168.1.201 iptables -t nat -A WANLOADBALANCE -m connmark --mark 0xca -j SNAT --to-source 192.168.1.202 iptables -t mangle -N WANLOADBALANCE_PRE iptables -t mangle -N ISP_enp1s0f0 iptables -t mangle -N ISP_enp1s0f1 iptables -t mangle -A PREROUTING -j WANLOADBALANCE_PRE iptables -t mangle -A WANLOADBALANCE_PRE -i enp3s0 -m state --state NEW -m statistic --mode random --probability 0.50000000000 -j ISP_enp1s0f0 iptables -t mangle -A WANLOADBALANCE_PRE -i enp3s0 -m state --state NEW -j ISP_enp1s0f1 iptables -t mangle -A WANLOADBALANCE_PRE -i enp3s0 -j CONNMARK --restore-mark --nfmask 0xffffffff --ctmask 0xffffffff iptables -t mangle -A ISP_enp1s0f0 -j CONNMARK --set-xmark 0xc9/0xffffffff iptables -t mangle -A ISP_enp1s0f0 -j MARK --set-xmark 0xc9/0xffffffff iptables -t mangle -A ISP_enp1s0f0 -j ACCEPT iptables -t mangle -A ISP_enp1s0f1 -j CONNMARK --set-xmark 0xca/0xffffffff iptables -t mangle -A ISP_enp1s0f1 -j MARK --set-xmark 0xca/0xffffffff iptables -t mangle -A ISP_enp1s0f1 -j ACCEPTこちらはいったんシェルで実行して、先ほどインストールしたiptables-persistentで設定を保存します。
iptables-save > /etc/iptables/rules.v4iptablesの方をざっと説明すると、-t mangleの部分では、enp1s0f0とenp1s0f0を1/2づつの確率でパケットにマーキングし、-tnatのほうはマスカレードとマーキングによるパケットの仕分けです。IPv4のロードバランスは設定としてはこれだけです。冗長構成は入っていないので非常にシンプルですね。設定がすんだら、端末から外部に接続できるかまず確認します。接続ができていれば、後はロードバランスされているかどうか以下のコマンドで確認します。
iptables -t nat -L -n -v (中略) Chain WANLOADBALANCE (1 references) pkts bytes target prot opt in out source destination 1048 76756 SNAT all -- * * 0.0.0.0/0 0.0.0.0/0 connmark match 0xc9 to:192.168.1.201 1055 71715 SNAT all -- * * 0.0.0.0/0 0.0.0.0/0 connmark match 0xca to:192.168.1.202このように負荷分散されていれば成功です。確認サイトなどを使うと、異なるIPアドレスで切り替わり接続できることがわかると思います。
以上、マーキングを使った冗長構成なしのIPv4でのWAN Load balancingでした。ではまた。
コメント
コメントを投稿