Juniper SRX Seriesでmulti homingする

# Juniper SRX Seriesでmulti homingする

Ciscoでsource address routingを使って出口を分けたことしかなく、やったら割と面倒だったのでメモ。
ほぼwebguiで設定不可です。
DHCP Serverとしても機能させる場合、JUNOS Software Release 12.1X47以降推奨。

## 目標

* インターネット回線が二つあり、SRX 210 HE2 １台で両方とも受け取る。接続はDHCP。PPPoEでもpp0とpp1に読み替えれば問題ないはずです。
* メインの回線とゲスト用回線の二つに分割する。VLAN切って置いてWifiのアクセスポイントに渡す。

# 設定

普通に設定できるところは設定項目のみ記載。

## vlan

|vlan|vlan name|description|
|---|---|---|
|vlan.1|internal|内部通信用|
|vlan.2|wifi|wifi用|
|vlan.3|Guest|guest wifi用|

## インターフェース

|interface|vlan|description|
|---|---|---|
|ge-0/0/0|no vlan dhcp-client|インターネット回線１|
|ge-0/0/1|native-vlan internal, trunk vlan [wifi Guest]|無線AP用|
|fe-0/0/2|no vlan dhcp-client|インターネット回線２|
|fe-0/0/3-7|access vlan internal|内部通信用|

## Zone

|Zone|interface|
|---|---|---|
|internal|vlan.1 vlan.2|
|internet|ge-0/0/0|
|Guest|vlan.3|
|Guest Internet|fe-0/0/2|

Security Policyは適当に。ルーティングをどうにかしてあげないとポリシーをどうしようがinternalとguestは繋がりません。
他、internal -> internetとguest -> Guest internetにSource NATしてインターネットに出れるようにしてあげます。

## Virtual Router

当初はsource natのみで出口が変えられると思ってたけど全然ダメだったのでVirtual Router機能を使ってどうにかします。

Virtual Routerを使うと複数のルーティングテーブルが作成でき、それに対してインタフェースを割り当てられるので今回の目的に最適。社内とゲストで相互で通信できないほうがよいので。

ゲスト用の回線として使うfe-0/0/2とvlan3を所属させておきます。
今回はdhcpで回線情報を受け取るので必要ないですが、設定がいる場合にはrouting-instances内のrouting-optionsでstatic routeを設定します。

```
routing-instances {
    guest {
        instance-type virtual-router;
        interface fe-0/0/2.0;
        interface vlan.3;
    }
}
```

## DHCP

これで大体動くんですが、DHCP Serverとして動かしてると、routing-instanceで隔離したところだけDHCPが配れません。
DHCPのパケットだけinet.0を通るように設定してあげる方法もありましたが、とてもわかりにくいので、12.1X47以降に搭載されているJDHCPを使う方法にします。

旧DHCP Serverの設定と混じるとエラーとなる糞仕様なのでデフォルトのdhcp設定は全て削除する必要があります。つまりwebguiからdhcpを設定してると駄目です。

DHCP serverは今回のようにVirtual Routerで分割している場合は、routing-instance内で作ってあげる必要があります。

```
system {
    service {
       dhcp-local-server {
            group dhcp-group {
                interface vlan.1;
                interface vlan.2;
            }
        }
    }
}
access {
    address-assignment {
        pool wifi {
            family inet {
                network x.x.x.x/20;
                range wifi-range {
                    low x.x.x.x;
                    high x.x.x.x;
                }
                dhcp-attributes {
                    name-server {
                        x.x.x.x;
                    }
                    router {
                        x.x.x.x;
                    }
                    propagate-settings vlan.2;
                }
            }
        }
        pool internal {
            family inet {
                network x.x.x.x/20;
                range internal-range {
                    low x.x.x.x;
                    high x.x.x.x;
                }
                dhcp-attributes {
                    name-server {
                        x.x.x.x;
                    }
                    router {
                        x.x.x.x;
                    }
                    propagate-settings vlan.1;
                }
            }
        }
    }
}
routing-instances {
        system {
            services {
                dhcp-local-server {
                    group guest {
                        interface vlan.3;
                    }
                }
            }
        }
        access {
            address-assignment {
                pool guest {
                    family inet {
                        network x.x.x.x/24;
                        range guest-range {
                            low x.x.x.x;
                            high x.x.x.x;
                        }
                        dhcp-attributes {
                            name-server {
                                x.x.x.x;
                            }
                            router {
                                x.x.x.x;
                            }
                            propagate-settings vlan.3;
                        }
                    }
                }
            }
        }
    }
}
```

DHCP clientでDHCPを受け取る側も同様でデフォルトのものは使えません。

```
interfaces {
    ge-0/0/0 {
        gigether-options {
            auto-negotiation;
        }
        unit 0 {
            family inet {
                dhcp-client {
                    update-server;
                }
            }
        }
    }
    fe-0/0/2 {
        fastether-options {
            auto-negotiation;
        }
        unit 0 {
            family inet {
                dhcp-client {
                    update-server;
                }
            }
        }
    }
}
```

これでゲスト側でもDHCPが渡せます。