皆様ルータはVRRPとかで冗長化しているかと思いますが、NATしているルータの場合failoverしてVIP引き継いでもNATテーブルが亡くなるとその瞬間の通信は途絶してしまいますよね。そこでNAT stateful failoverです。
基本はVyattaのドキュメントを参照。Vyattaで普通にNATルータを作れるくらいの知識が前提。全部Vyattaのドキュメントに書かれているので、わからなければそっちを見てください。
2台のVyattaルータをVRRPで冗長化する際に問題となるNATテーブルの消失を解消するのが目的。
条件・概要
- Vyatta Core 6.1を利用して構築する
- NAT配下にクライアントが存在する
- WAN側のIPアドレスは固定
- 固定アドレスであればPPPoEでも同様のことは可能と思われるが、ここではPPPoEの冗長化は考慮せず、Ethernetによる接続回線を想定する
- NATテーブル同期の直結接続を用意する(WAN/LANで代用してもいいのかも)
Configの要点
- 2台で基本的には同一設定にする。異なる点は以下。
- ホスト名
- 物理NICに割り当てるIPアドレス
- VRRPのpriority
- firewallの部分は必要最低限の設定。SNATしているけど、一応最低限として。
- interface ethernet eth0 vrrpとinterface ethernet eth2 vrrpは同一のグループにする。interface ethernet ethX vrrpの中でVIPを指定する。
- eth1は冗長構成ペアを直接接続。
- service conntrack-syncでstateful failoverを実現。service conntrack-sync interface eth1が同期するためのNIC指定。
- service conntrack-sync failover-mechanism vrrp sync groupでVRRPで冗長化することと、冗長化するVRRPのグループを指定。
- NATはmasquaradeではなくsourceを指定する。動的にWAN側のIPアドレスが変わる環境はmasquaradeが必要だけどそれだとNATテーブルの保持は意味が無いので。WAN側のIPアドレスが変更されないならmasquaradeよりsourceのほうがパフォーマンスがいい。
- DNATの設定はここでは扱わない。設定してあれば同様にNATテーブルは同期するので動作はすると思うが未検証。Config-syncの検証を行うときに検証する。
これで、運用系ルータが止まってVRRPで待機系に切り替わっても通信中のセッションは大丈夫。とはいえ、VRRPの切り替わりは数秒かかるので、映像とか音声は途切れちゃうと思いますけどね。
Network構成図
—-
Global Network 10.10.0.0/24 (dummy)
VRRP Heartbeat Network 10.10.10.0/24
Protected Network 192.168.100.0/24
+----------------------------------------+
| L3 SW / internet |
+----------------------------------------+
| 10.10.0.1
|
+----------------------------------------+
| L2 SW |
+----------------------------------------+
| |
| - - (VRRP VIP:10.10.0.101) - - - |
| |
| |
|eth0(10.10.0.102) |eth0(10.10.0.103)
+-----------+eth1(10.10.10.2) +-------------+
|R1(primary)|------CULSTER--------|R2(secondary)|
+-----------+ eth1(10.10.10.3)+-------------+
|eth2(192.168.100.2) |eth2(192.168.200.3)
| |
| - - (VRRP VIP:192.168.100.1) - - |
| |
+----------------------------------------+
| L2 SW / 192.168.100.0/24 |
+----------------------------------------+
—-
Configuration
R1
—-
firewall {
name internet_to_protected {
default-action drop
description "Internet to Protected"
rule 10 {
action accept
state {
established enable
}
}
}
name protected_to_internet {
default-action accept
description "Protected to Internet"
rule 10 {
action drop
state {
invalid enable
}
}
}
}
interfaces {
ethernet eth0 {
address 10.10.0.102/24
firewall {
in {
name internet_to_protected
}
}
vrrp {
vrrp-group 1 {
advertise-interval 1
preempt true
priority 200
sync-group MAIN-GW
virtual-address 10.10.0.101
}
}
}
ethernet eth1 {
address 10.10.10.2/24
}
ethernet eth2 {
address 192.168.100.2/24
firewall {
in {
name protected_to_internet
}
}
vrrp {
vrrp-group 2 {
advertise-interval 1
preempt true
priority 200
sync-group MAIN-GW
virtual-address 192.168.100.1
}
}
}
loopback lo {
}
}
service {
conntrack-sync {
failover-mechanism {
vrrp {
sync-group MAIN-GW
}
}
interface eth1
}
nat {
rule 10 {
description SNAT
outbound-interface eth0
outside-address {
address 10.10.0.101
}
source {
address 192.168.100.0/24
}
type source
}
}
ssh {
port 22
protocol-version v2
}
}
system {
gateway-address 10.10.0.1
host-name R1
}
—-
R2
—-
firewall {
name internet_to_protected {
default-action drop
description "Internet to Protected"
rule 10 {
action accept
state {
established enable
}
}
}
name protected_to_internet {
default-action accept
description "Protected to Internet"
rule 10 {
action drop
state {
invalid enable
}
}
}
}
interfaces {
ethernet eth0 {
address 10.10.0.103/24
firewall {
in {
name internet_to_protected
}
}
vrrp {
vrrp-group 1 {
advertise-interval 1
preempt true
priority 100
sync-group MAIN-GW
virtual-address 10.10.0.101
}
}
}
ethernet eth1 {
address 10.10.10.3/24
}
ethernet eth2 {
address 192.168.100.3/24
firewall {
in {
name protected_to_internet
}
}
vrrp {
vrrp-group 2 {
advertise-interval 1
preempt true
priority 100
sync-group MAIN-GW
virtual-address 192.168.100.1
}
}
}
loopback lo {
}
}
service {
conntrack-sync {
failover-mechanism {
vrrp {
sync-group MAIN-GW
}
}
interface eth1
}
nat {
rule 10 {
description SNAT
outbound-interface eth0
outside-address {
address 10.10.0.101
}
source {
address 192.168.100.0/24
}
type source
}
}
ssh {
port 22
protocol-version v2
}
}
system {
gateway-address 10.10.0.1
host-name R2
}
—-
Hi
Please recommend if we want to add VLAN
L2 SW / 192.168.100.0/24,192.168.101.0/24,192.168.102.0/24
Thanks
Ley