vyattaのNAT設定
Juniper社のSRXとSSGしか経験ないのだけれど、仮想アプライアンスのファイアウォールをやろう、ついでにOSSで無料の範囲でいいんでねということでvyattaを触った。
で、色々癖があるなぁと思った。Juniper SRXって優秀なインタフェースしてるんだなぁとも。何か、今いち不評そうなイメージですけど。
良い所
妙だと思った/嫌だと思った所
- commit時、JUNOSなら検証に失敗したら設定適用しないのにvyattaは部分的でも設定を適用してしまう
- rollback時、JUNOSと違って何故か再起動を要求する。でもコンフィグをテキストからロードしたときは別に再起動を要求しない。意味がわからない。
- ファイアウォール設定がいまいちゾーンの設定と離れたところに書かれるのが、何か妙にしっくりこない
- ファイアウォール設定をゾーン設定と離したせいでアドレスグループの設定もしっくりこない ゾーンとアドレスグループは一体になってるイメージなのだがなぁ
- 何も考えず作ると「ステートレス」なファイアウォールの動きになって、パケットが行きは通るけど返ってこないという状態になる。ちゃんと戻りのパケットは発行済みセッションは通そう、とかファイアウォールルールに書く必要がある。
- 1対1NATが無い。 双方向のNATを書こうとすると、そのままソース/宛先両方のNATルールを書かないといけない。さらに、10IPを10IP別のIP帯にマッピングする場合もIP範囲を1つのルールで書くと動的NATになってしまう。よって1対1NATをたくさん書く場合はIP数*2の設定が必要になってしまう。
- MACアドレスやIP等、HAクラスタ内各機固有の設定を各機ごとに持たせるせいでコンフィグの一斉適用が面倒。
コンフィグ例(クラスタ)
クラスタ設定は、共通部分がこんな感じ。
cluster { dead-interval 10000 group vycl1 { auto-failback true primary RT01 secondary RT02 service 172.31.93.192/24/eth0 ←VIP service 172.31.93.128/24/eth0 ←NATするアドレス分だけ記載 service 172.31.93.129/24/eth0 service 10.150.0.1/16/eth1 ←VIP } interface eth1 keepalive-interval 2000 monitor-dead-interval 20000 pre-shared-secret **************** }
インタフェース設定は各々の設定の中で別々になる。
そこがまたJUNOSと違う。
1号機
interfaces { ethernet eth0 { address 172.31.93.193/24 duplex auto hw-id 00:50:56:ac:28:e4 smp_affinity auto speed auto } ethernet eth1 { address 10.150.0.2/16 duplex auto hw-id 00:50:56:ac:29:42 smp_affinity auto speed auto } loopback lo { } }
2号機
interfaces { ethernet eth0 { address 172.31.93.194/24 duplex auto hw-id 00:50:56:ac:1a:bf smp_affinity auto speed auto } ethernet eth1 { address 10.150.0.3/16 duplex auto hw-id 00:50:56:ac:11:c2 smp_affinity auto speed auto } loopback lo { } }
1対1NATの例
nat { destination { rule 1 { destination { address 172.31.93.128 } inbound-interface eth0 translation { address 10.150.0.103 } } rule 2 { destination { address 172.31.93.129 } inbound-interface eth0 translation { address 10.150.2.1 } } } source { rule 1 { outbound-interface eth0 source { address 10.150.0.103 } translation { address 172.31.93.128 } } rule 2 { outbound-interface eth0 source { address 10.150.2.1 } translation { address 172.31.93.129 } } } }