Fortigate（その５：SD-WANにてNull Encryption）

# IPsec Null Encryption at SD-WAN
先日の記事「[久しぶりにGNS3（その42： IPsec Null Encryption）](https://qiita.com/infinite1oop/items/afe20b5792285c4c1ea1)」と同様の内容をFortigateで試した。非暗号化を実現し、Fortigate間のパケットを見ることが目的。

## ネットワーク
構成的には、今回も「[その３](https://qiita.com/infinite1oop/items/47accfa9fd2f99d81ea2)」と同じである。

<img src="https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F634816%2F2007216e-af65-eb41-41e1-d9be3331a5a8.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=04f53289ce5539c613e0c8a50c468910">

ここでもVXLANを利用しており、両端のPCは同じネットワークセグメントに属している。

## 設定
まずは「[その３](https://qiita.com/infinite1oop/items/47accfa9fd2f99d81ea2)」の設定を行い、その後、暗号化方式で、非暗号化のものを選択する。いくつかトライ＆エラーした結果、CUIにて下記設定をすると、IPsec Null Encryptionを実現できるようだ（関連する部分のみ記載）。

```
FG1 # config vpn ipsec phase1-interface
FG1 (phase1-interface) # edit vpn1_1
FG1 (vpn1_1) # show
    edit "vpn1_1"
        set interface "wan1"

        set proposal aes128-sha256 aes256-sha256 aes128-sha1 aes256-sha1
        set remote-gw 10.1.1.2

    next
end

FG1 (vpn1_1) # set proposal des-md5
FG1 (vpn1_1) # next
```

”des-md5”のみ設定する。なお、”vpn1_1”はトンネル名である。

```
FG1 # config vpn ipsec phase2-interface
FG1 (phase2-interface) # edit vpn1_1
FG1 (vpn1_1) # show
config vpn ipsec phase2-interface
    edit "vpn1_1"
        set phase1name "vpn1_1"
        set proposal aes128-sha1 aes256-sha1 aes128-sha256 aes256-sha256 aes128gcm aes256gcm chacha20poly1305
        set auto-negotiate enable
    next
end

FG1 (vpn1_1) # set proposal null-md5
FG1 (vpn1_1) # next
```

”null-md5”のみ設定する。トンネル数分、同じ設定を行う。この時、GUIで状況を確認すると下記となる。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/ac221493-8cc3-d9be-52f6-5472a9facec4.png", width=80%>

「Null」は見えない。


## 検証
末端のPC間でpingを実行、その時のWiresharkのデータが下記となる。

![多重トンネルのコピー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/09acaa42-e724-4fe4-aa8d-4fd255a657b0.png)

暗号化されていないため、多重トンネル化およびVXLANが観察できる。
- WAN IPアドレス（10.1.2.1,2）
- ESPパケット
    - ループバックアドレス（1.1.1.1,2）
    - VXLAN（UDPポート4789）
        - 末端PC IPアドレス（192.168.100.101,102）
        - ICMP（ping）

また、このときの、CLIによるIPsecの状況は下記となる。

```
FG1 # get vpn ipsec tunnel summary
'vpn1_1' 10.1.1.2:0  selectors(total,up): 1/1  rx(pkt,err): 50736/0  tx(pkt,err): 1531411/2
'vpn1_2' 10.1.2.2:0  selectors(total,up): 1/1  rx(pkt,err): 45596/0  tx(pkt,err): 1525883/0
```
```
FG1 # diagnose vpn tunnel list
------------------------------------------------------
name=vpn1_1 ver=1 serial=2 10.1.1.1:0->10.1.1.2:0 nexthop=10.1.1.2 tun_id=10.1.1.2 tun_id6=::10.1.1.2 dst_mtu=1500 dpd-link=
on weight=1
bound_if=5 real_if=5 lgwy=static/1 tun=intf mode=auto/1 encap=none/4648 options[1228]=npu frag-rfc  run_state=0 role=primary
 accept_traffic=1 overlay_id=0

proxyid_num=1 child_num=0 refcnt=4 ilast=2 olast=2 ad=/0
stat: rxp=50764 txp=1531440 rxb=6144470 txb=898054109
dpd: mode=on-demand on=1 idle=1000ms retry=3 count=0 seqno=28
natt: mode=none draft=0 interval=0 remote_port=0
fec: egress=0 ingress=0
proxyid=vpn1_1 proto=0 sa=1 ref=3 serial=1 auto-negotiate
  src: 0:0.0.0.0-255.255.255.255:0
  dst: 0:0.0.0.0-255.255.255.255:0
  SA:  ref=6 options=18227 type=00 soft=0 mtu=1458 expire=21354/0B replaywin=2048
       seqno=175e2f esn=0 replaywin_lastseq=0000c64b qat=0 rekey=0 hash_search_len=1
  life: type=01 bytes=0/0 timeout=42898/43200
  dec: spi=4475633b esp=null key=0
       ah=md5 key=16 88c0c76bed3895a5764e6a06d9cb1063
  enc: spi=9aa32971 esp=null key=0
       ah=md5 key=16 5266bc1d31efba2eb35ecf0b43aa60f0
  dec:pkts/bytes=50765/6144510, enc:pkts/bytes=3062468/1839021745
  npu_flag=03 npu_rgwy=10.1.1.2 npu_lgwy=10.1.1.1 npu_selid=0 dec_npuid=1 enc_npuid=1
run_tally=0
------------------------------------------------------
```
”sa=1”はIPsecが確立していることを示し、同時に”esp=null”も見える。

EOF