Juniper SRX : フレッツ光を利用したインターネット接続をするまで

Juniper SRX でフレッツに接続する

# 前提条件
- フレッツ光ネクストに契約している
- ひかり電話を契約している(+¥500/月)
- ひかり電話を収容する（電話として利用する）
- IPv6 は IPoE (AsahiNet IPv6接続機能 (IPoE接続))を利用する
- IPv4 は IPv4 over IPv6 (AsahiNet v6コネクト 固定IP(IPIP))を利用する


## 検証機種
```
r00t@SRX340>  show version
Hostname: SRX340
Model: srx340
Junos: 23.2R2.21
JUNOS Software Release [23.2R2.21]

r00t@SRX340> 
```

## 構成
- 物理I/F構成
    - ge-0/0/0 LAN側 
    - ge-0/0/7 WAN側 (HGWのWANポート)
    - ge-0/0/8 WAN側 (小型ONU)
- 論理I/F構成
    - VLAN-3967=irb.3967 (WAN側VLAN)
    - VLAN-0001=irb.0    (LAN側VLAN)

---

# ★ひかり電話の設定
- ひかり電話はWAN側からIPv4のDHCPで/30のアドレスを取得する必要がある
    - Flet's回線ではInterfaceをブリッジさせるとIPv4 アドレスをDHCPで取得できる

## WAN側Interfaceの設定
- 今回は小型ONUで終端しかつ、ひかり電話用にWANポートを用意する必要があるため専用のVLANを用意して対応する(HUBを挟まない構成)

## VLANの設定
```
set vlans VLAN-3967 vlan-id 3967
set vlans VLAN-3967 l3-interface irb.3967
set interfaces irb unit 3967 description "Flet's_East"
```
## Interfaceの紐づけ
```
set interfaces ge-0/0/7 unit 0 family ethernet-switching vlan members VLAN-3967
set interfaces ge-0/0/8 unit 0 family ethernet-switching vlan members VLAN-3967
```

## セキュリティゾーンの設定
- `Untrust` ゾーンに `irb.3967` を紐づける
- SRX自身でONU(`irb.3967`)からDHCPを取得できるようにする
```
set security zones security-zone Untrust interfaces irb.3967 host-inbound-traffic system-services dhcp
```

## DHCPの確認
- `irb.3967` に対して Stateが`BOUND` になっていること
- `irb.3967` に対して DHCP options でNTT[EAST|WEST]-NGNのアドレスが `/30` で降ってきていればOK
```
r00t@SRX340> show dhcp client binding detail

Client Interface/Id: irb.3967
     Hardware Address:             XX:XX:XX:XX:XX:XX
     State:                        BOUND(LOCAL_CLIENT_STATE_BOUND)
     Lease Expires:                2024-04-04 22:41:56 JST
     Lease Expires in:             11536 seconds
     Lease Start:                  2024-04-04 18:41:56 JST
     Server Identifier:            XXX.XXX.XXX.XXX
     Client IP Address:            XXX.XXX.XXX.XXX
     Update Server                 No

DHCP options:
    Name: dhcp-lease-time, Value: 4 hours
    Name: server-identifier, Value: XXX.XXX.XXX.XXX
    Name: router, Value: [ XXX.XXX.XXX.XXX ]
    Name: subnet-mask, Value: 255.255.255.252

r00t@SRX340> 
```

ここまでの作業で電話は使えるはず
`117` で時報が聞ければOK
`177` で天気予報も聞けるよ

---

# ★IPoEの設定
- DHCPv6-PDでprefixを受け取る
    - ひかり電話を契約していると `/56`でIPv6アドレスが割り振られるのでDHCPv6-PDでprefixを受け取る
    
## IPv6機能の有効化
- デフォルトではIPv6の機能が無効化されているため有効化させる(要再起動)
```
set security forwarding-options family inet6 mode flow-based
```


## Interfaceの設定

```
set interfaces irb unit 3967 family inet6 dhcpv6-client client-type stateful
set interfaces irb unit 3967 family inet6 dhcpv6-client client-ia-type ia-pd
set interfaces irb unit 3967 family inet6 dhcpv6-client client-identifier duid-type duid-ll
set interfaces irb unit 3967 family inet6 dhcpv6-client req-option dns-server
set interfaces irb unit 3967 family inet6 dhcpv6-client req-option domain
set interfaces irb unit 3967 family inet6 dhcpv6-client req-option ntp-server
set interfaces irb unit 3967 family inet6 dhcpv6-client req-option sip-server
```
## firewall filterの設定
- HGW用に設定した`irb.3967 (ge-0/0/7)`にDHCPv6-PDでIPv6アドレスの経路情報を奪い取ってこないようfirewall filterでIPv6パケットを落とす必要がある

```
set firewall family ethernet-switching filter discard-ipv6 term ipv6 from ether-type ipv6
set firewall family ethernet-switching filter discard-ipv6 term ipv6 then discard
set firewall family ethernet-switching filter discard-ipv6 term others then accept
set interfaces ge-0/0/7 unit 0 family ethernet-switching filter input discard-ipv6
```

## セキュリティゾーンの設定
- `Untrust` ゾーンに `irb.3967` を紐づける
- SRX自身でONU(`irb.3967`)からDHCPv6を取得できるようにする
```
set security zones security-zone Untrust interfaces irb.3967 host-inbound-traffic system-services dhcpv6
```

## DHCPv6の確認
- `irb.3967` に対して Stateが`BOUND` になっていること
- `irb.3967` に対して Client IP Prefixが`/56` でもらっていればOK
```
r00t@SRX340> show dhcpv6 client binding detail

Client Interface/Id: irb.3967
     Hardware Address:             XX:XX:XX:XX:XX:XX
     State:                        BOUND(DHCPV6_CLIENT_STATE_BOUND)
     ClientType:                   STATEFUL
     Lease Expires:                2024-04-04 22:39:30 JST
     Lease Expires in:             11737 seconds
     Lease Start:                  2024-04-04 18:39:30 JST
     Bind Type:                    IA_PD
     Preferred prefix length       0
     Sub prefix length             0
     Client DUID:                  LL0x3-10:39:XX:XX:XX:XX
     Rapid Commit:                 Off
     Server Identifier:            fe80::221:d8ff:XXXX:XXXX
     Client IP Prefix:             XXXX:XXXX:XXXX:XXXX::/56

DHCP options:
    Name: server-identifier, Value: LL0x1-00:0d:5e:xx:xx:xx
    Name: sip-server-list, Value: XXXX:XXX:XXXX:XXXX::X
    Name: dns-recursive-server, Value: XXXX:XXX:XXXX:X::X,XXXX:XXX:XXXX:X::X
    Name: domain-serch-list, Value: flets-eastjpiptvfjp
    Name: sntp, Value: XXXX:XXX:XXX::X,XXXX:XXX:XXX::X

r00t@SRX340> 
```

## default gateway用のアドレスをRAで取得する
- ONU(`irb.3967`)からRAを受け取りdefault gatewayを設定
```
set protocols router-advertisement interface irb.3967 passive-mode
```

## RAの確認
- `irb.3967` に対して `fe80::` から始まるリンクローカルアドレスがAdvertisement されていればOK
- Advertisement された `fe80::` から始まるリンクローカルアドレスをメモしておく

```
r00t@SRX340> show ipv6 router-advertisement interface irb.3967
Interface: irb.3967
  Advertisements sent: 12, last sent 00:05:30 ago
  Solicits sent: 1, last sent 01:02:40 ago
  Solicits received: 0
  Advertisements received: 44
  Solicited router advertisement unicast: Disable
  IPv6 RA Preference: DEFAULT/MEDIUM
  Passive mode: Disable
  Upstream mode: Disable
  Downstream mode: Disable
  Proxy blackout timer: Not Running
  Advertisement from fe80::221:d8ff:XXXX:XXXX, heard 00:02:21 ago
    Managed: 1 [0]
    Other configuration: 1 [0]
    Link MTU: 1500 bytes
    Reachable time: 300000 ms
    Default lifetime: 1800 sec
    Retransmit timer: 10000 ms
    Current hop limit: 64

r00t@SRX340>
```

## default gatewayの設定
- Advertisement された `fe80::` から始まるリンクローカルアドレスをdefault gatewayとして
`qualified-next-hop` で指定しInterfaceは `irb.3967`を指定する
```
set routing-options rib inet6.0 static route ::/0 qualified-next-hop fe80::221:d8ff:XXXX:XXXX interface irb.3967
```

## default route の確認
- `::/0(default route)` の [Static/5] に設定した`fe80::` から始まるリンクローカルアドレスが via が `irb.3967`をならOK
```
r00t@SRX340> show route table inet6.0

inet6.0: 7 destinations, 8 routes (7 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both

::/0               *[Static/5] 01:10:08
                    >  to fe80::221:d8ff:XXXX:XXXX via irb.3967
                    [Access-internal/12] 01:07:09
                    >  to fe80::221:d8ff:XXXX:XXXX via irb.3967
XXXX:XXXX:XXXX:XXXX::/56
                   *[Access-internal/12] 01:10:07
                       Reject
<省略>

r00t@SRX340> 
```

## LANに対してprefixを広告する
- DHCPv6-PDで受け取ったprefixを- LAN側(`irb.0`)ンターフェースに広告する
- 

```
set interfaces irb unit 3967 family inet6 dhcpv6-client update-router-advertisement interface irb.0
set interfaces irb unit 3967 family inet6 dhcpv6-client update-router-advertisement interface irb.0 managed-configuration
set interfaces irb unit 3967 family inet6 dhcpv6-client update-router-advertisement interface irb.0 other-stateful-configuration

# RAを使ったDNSサーバの配布の設定
set interfaces irb unit 3967 family inet6 dhcpv6-client update-router-advertisement interface irb.0 enable-recursive-dns-server-option
```

## 確認
- LAN側(`irb.0`)に対して `fe80::` から始まるリンクローカルアドレスがAdvertisement されていればOK
```
r00t@SRX340> show ipv6 router-advertisement interface irb.0
Interface: irb.0
  Advertisements sent: 10, last sent 00:07:00 ago
  Solicits sent: 1, last sent 00:54:22 ago
  Solicits received: 0
  Advertisements received: 76
  Solicited router advertisement unicast: Disable
  IPv6 RA Preference: DEFAULT/MEDIUM
  Passive mode: Disable
  Upstream mode: Disable
  Downstream mode: Disable
  Proxy blackout timer: Not Running
  Advertisement from fe80::d6d7:48ff:fe67:66c0, heard 00:02:14 ago
    Managed: 0 [1]
    Other configuration: 0 [1]
    Link MTU: 1500 bytes
    Reachable time: 0 ms
    Default lifetime: 1800 sec
    Retransmit timer: 0 ms
    Current hop limit: 64

r00t@SRX340> 
```

## DHCPv6の確認
- `irb.0` に対して グローバルなRA Prefix が払い出されていればOK
```
r00t@SRX340> show dhcpv6 client binding detail

Client Interface/Id: irb.3967
     Hardware Address:             XX:XX:XX:XX:XX:XX
     State:                        BOUND(DHCPV6_CLIENT_STATE_BOUND)
     ClientType:                   STATEFUL
     Lease Expires:                2024-04-04 22:39:30 JST
     Lease Expires in:             11737 seconds
     Lease Start:                  2024-04-04 18:39:30 JST
     Bind Type:                    IA_PD
     Preferred prefix length       0
     Sub prefix length             0
     Client DUID:                  LL0x3-10:39:XX:XX:XX:XX
     Rapid Commit:                 Off
     Server Identifier:            fe80::221:d8ff:XXXX:XXXX
     Client IP Prefix:             XXXX:XXXX:XXXX:XXXX::/56

DHCP options:
    Name: server-identifier, Value: LL0x1-00:0d:5e:xx:xx:xx
    Name: sip-server-list, Value: XXXX:XXX:XXXX:XXXX::X
    Name: dns-recursive-server, Value: XXXX:XXX:XXXX:X::X,XXXX:XXX:XXXX:X::X
    Name: domain-serch-list, Value: flets-eastjpiptvfjp
    Name: sntp, Value: XXXX:XXX:XXX::X,XXXX:XXX:XXX::X

Update RA interfaces:
     Interface: irb.0
           RA Prefix:      XXXX:XXXX:XXXX:XXXX::/64
     
r00t@SRX340>
```

ここまでの作業でIPv6でのインターネットは使えるようになるはず

# ★IPv4 over IPv6 (AsahiNet v6connect IPIP)の設定

- [AsahiNetのマイページ](https://mypage.asahi-net.or.jp/mypage/apply/ipv6/settings-information/check) で `AFTRエンドポイントIPv6アドレス`/`インターフェースID`/ `固定IPv4アドレス` を確認しておく
- DHCPv6 でもらっているアドレス空間を控えておく
    - source address は DHCPv6 でもらっているアドレスの`::`より前のアドレスに`インターフェースID` を足したアドレスになる

## tunnel Interfaceの設定
```
set interfaces ip-0/0/0 unit 0 description AsahiNet_v6connect_IP-IP
set interfaces ip-0/0/0 unit 0 tunnel source <上記で確認したアドレス>
set interfaces ip-0/0/0 unit 0 tunnel destination <AFTRエンドポイントIPv6アドレス>
set interfaces ip-0/0/0 unit 0 family inet address <固定IPv4アドレス>/32
```

## RAでLAN側 Interfaceへ配布するアドレスの設定
```
set interfaces irb unit 3967 family inet6 dhcpv6-client update-router-advertisement interface irb.0 interface-identifier <AFTRエンドポイントIPv6アドレス>
set interfaces irb unit 3967 family inet6 dhcpv6-client update-router-advertisement interface irb.0 prefix-identifier <インターフェースID>
set interfaces irb unit 3967 family inet6 dhcpv6-client update-router-advertisement interface irb.0 managed-configuration
set interfaces irb unit 3967 family inet6 dhcpv6-client update-router-advertisement interface irb.0 other-stateful-configuration
set interfaces irb unit 3967 family inet6 dhcpv6-client update-router-advertisement interface irb.0 enable-recursive-dns-server-option
```

## IPアドレスがInterfaceに割り当てられているかを確認

```
r00t@SRX340> show interfaces terse
Interface               Admin Link Proto    Local                 Remote

<省略>

ip-0/0/0                up    up
ip-0/0/0.0              up    up   inet     <固定IPアドレス>/32       --> 0/0
ipip                    up    up
irb                     up    up
irb.0                   up    up   inet     <LAN側アドレス>/24
                                   inet6    <tunnel source アドレス/64
                                            fe80::1239:xxxx:xxxx:xxxx/64
irb.3967                up    up   inet6    fe80::1239:xxxx:xxxx:xxxx/64

<省略>

r00t@SRX340>
```


## セキュリティゾーンの設定
- `Untrust` ゾーンに `ip-0/0/0.0` を紐づける
- SRX自身でInternet(`ip-0/0/0.0`)から必要な通信ができるようにする
```
set security zones security-zone Untrust interfaces ip-0/0/0.0 host-inbound-traffic system-services dns
set security zones security-zone Untrust interfaces ip-0/0/0.0 host-inbound-traffic system-services ping
set security zones security-zone Untrust interfaces ip-0/0/0.0 host-inbound-traffic system-services ike
```
## default route の設定
```
set routing-options static route 0.0.0.0/0 next-hop ip-0/0/0.0
```
## default route の確認
- `0.0.0.0/0(default route)` の [Static/5] に via が `ip-0/0/0.0`とあればOK

```

r00t@SRX340> show route

inet.0: 9 destinations, 10 routes (9 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both

0.0.0.0/0          *[Static/5] 01:46:23
                    >  via ip-0/0/0.0
                    [Access-internal/12] 01:43:49, metric 0

<省略>

r00t@SRX340>         
```

## NATの設定
- Trust → Untrust な通信はNATするようにする NAT先は`0.0.0.0/0` なので `ip-0/0/0.0`に設定しているIPv4アドレス

```
set security nat source rule-set Trust-to-Untrust from zone Trust
set security nat source rule-set Trust-to-Untrust to zone Untrust
set security nat source rule-set Trust-to-Untrust rule source-nat-rule match source-address 0.0.0.0/0
set security nat source rule-set Trust-to-Untrust rule source-nat-rule then source-nat interface
```

ここまでの作業でIPv4でのインターネットは使えるようになるはず

---

# 参考にしたサイト
- [Juniper SRXでフレッツIPoEのDHCPv6-PD設定](https://qiita.com/pekeq/items/d2612bfdefee53c5fb42) - @pekeq さん
- [Junos(SRX)でDS-Liteを使用してみる](https://qiita.com/kazubu/items/7356e14d7b284cff7907) - @kazubu さん