ヤマハルーターで Cloudflare Magic WAN 接続
ヤマハのルーターで Cloudflare の Magic WAN と IPsec 接続する機会があったので、動作した設定例を載せておきます。
目的
RTX830 と Cloudflare で IPsec トンネルを張る。
Magic WAN の先にある既存のプライベートネットワーク 172.16.0.0/16
と RTX830 の LAN 側 192.168.100.0/24
を相互通信可能にする。
機種/バージョン
Yamaha RTX830
Rev.15.02.17
構成
試験環境のルーターについて
- プライベート(左側)からパブリック(右側)ネットワークの抜けを NAPT
- パブリック IP アドレスは不定
- IPsec パススルー(ALG)には対応していない
設定
ヤマハ
Cloudflare 側の IPsec サポートパラメーターに合わせて調整した(つもり)。
具体的な設定はここを見た。
console character ja.utf8
ip route default gateway 192.168.88.254
ip route 172.16.0.0/16 gateway tunnel 1
ip lan1 address 192.168.100.1/24
ip lan2 address 192.168.88.1/24
tunnel select 1
description tunnel yamaha
ipsec tunnel 1
ipsec sa policy 1 1 esp aes256-cbc sha256-hmac anti-replay-check=off
ipsec ike version 1 2
ipsec ike duration ipsec-sa 1 300
ipsec ike duration isakmp-sa 1 300
ipsec ike encryption 1 aes256-cbc
ipsec ike group 1 modp2048
ipsec ike hash 1 sha256
ipsec ike keepalive log 1 off
ipsec ike keepalive use 1 on heartbeat 10 6
ipsec ike local address 1 192.168.88.1
ipsec ike log 1 key-info message-info payload-info
ipsec ike local name 1 [Cloudflare 側の FQDN 名] fqdn
ipsec ike nat-traversal 1 on force=on
ipsec ike pfs 1 on
ipsec ike proposal-limitation 1 on
ipsec ike pre-shared-key 1 text yamaha
ipsec ike remote address 1 [Cloudflare 側の IPv4 アドレス]
ipsec ike remote name 1 [Cloudflare 側の IPv4 アドレス] ipv4-addr
ip tunnel address 10.255.255.6/31
ip tunnel mtu 1340
tunnel enable 1
ipsec auto refresh on
syslog debug on
telnetd host lan
dhcp service server
dhcp server rfc2131 compliant except remain-silent
dhcp scope 1 192.168.100.2-192.168.100.191/24
statistics traffic on
メモ
-
ipsec ike duration ipsec-sa
とipsec ike duration isakmp-sa
試験用:リキー見るため短く指定 -
ipsec ike log 1 key-info message-info payload-info
とsyslog debug on
試験用:確認目的でログを詳しく -
ipsec ike nat-traversal 1 on force=on
環境依存:NAPT 超えの対応
Cloudflare
ヤマハと比べると、Cloudflare 側は細かなパラメーター設定はしなくてよい(するところがない)作りになっている。
メモ
-
トンネルヘルスチェックは
リクエスト
を選ぶ
デフォルトのレスポンス
の場合、自身のトンネルアドレス10.255.255.6
が送信元となったパケットが送られてくるが、そうなると下記を吐いて捨てていた
(挙動を変えるスイッチがあるかもしれないが未確認)TUNNEL[1]: Duplicate IP source address(10.255.255.6 to 10.255.255.7)
- ヤマハに設定する FQDN 名などは Tunnel の名前をクリックすると出てくる
結果
疎通 OK
# ローカル -> リモート
## ローカル
> ping 172.16.1.243
64 bytes from 172.16.1.243: icmp_seq=29 ttl=61 time=20.223 ms
## リモート
$ tshark -i1 icmp
1 0.000000000 192.168.100.200 → 172.16.1.243 ICMP 98 Echo (ping) request id=0x1200, seq=29/7424, ttl=61
2 0.000035496 172.16.1.243 → 192.168.100.200 ICMP 98 Echo (ping) reply id=0x1200, seq=29/7424, ttl=64 (request in 1)
# リモート -> ローカル
## リモート
$ ping 192.168.100.200
64 bytes from 192.168.100.200: icmp_seq=1 ttl=61 time=26.4 ms
## ローカル
❯ sudo tshark -i12 icmp
1 0.000000 172.16.1.243 → 192.168.100.200 ICMP 98 Echo (ping) request id=0x2ca7, seq=1/256, ttl=61
2 0.000213 192.168.100.200 → 172.16.1.243 ICMP 98 Echo (ping) reply id=0x2ca7, seq=1/256, ttl=64 (request in 1)
Tips
確認に使ったコマンド。
他にあれば教えて下さい。
# show ipsec sa
Total: isakmp:2 send:2 recv:2
sa sgw isakmp connection dir life[s] remote-id
----------------------------------------------------------------------------
1 1 - ike - 65 [Cloudflare IP]
2 1 4 tun[0001]esp send 65 [Cloudflare IP]
3 1 4 tun[0001]esp recv 65 [Cloudflare IP]
4 1 - ike - 283 [Cloudflare IP]
5 1 4 tun[0001]esp send 300 [Cloudflare IP]
6 1 4 tun[0001]esp recv 300 [Cloudflare IP]
# ipsec ike log 1 key-info message-info payload-info
# syslog debug on
# show log
[IKE2] GW:1/SA:1/INIT process IKE header[msgID:0]
[IKE2] GW:1/SA:1/INIT initiator 1
[IKE2] GW:1/SA:1/INIT process SA payload
[IKE2] GW:1/SA:1/INIT proposal#1 IKE
[IKE2] GW:1/SA:1/INIT transform ENCR AES_CBC
[IKE2] GW:1/SA:1/INIT attr/ TV KEYLEN data:256
[IKE2] GW:1/SA:1/INIT transform AUTH HMAC_SHA2_256_128
[IKE2] GW:1/SA:1/INIT transform PRF HMAC_SHA2_256
[IKE2] GW:1/SA:1/INIT transform DH MODP_2048
[IKE2] GW:1/SA:1/INIT process KE payload
[IKE2] GW:1/SA:1/INIT MODP_2048 data:d9cecc76..(256bytes)
[IKE2] GW:1/SA:1/INIT process Nonce payload
[IKE2] GW:1/SA:1/INIT data:95a882d00c4550f1..(64bytes)
[IKE2] GW:1/SA:1/INIT process Notify payload
[IKE2] GW:1/SA:1/INIT NAT_DETECTION_DESTINATION_IP data:
[IKE2] GW:1/SA:1/INIT process Notify payload
[IKE2] GW:1/SA:1/INIT NAT_DETECTION_SOURCE_IP data:
[IKE2] GW:1/SA:1/INIT no NAT box detected at remote side
[IKE2] GW:1/SA:1/INIT NAT box detected at local side
[IKE2] GW:1/SA:1/INIT Diffie-Hellman value:
:
:
[IKE2] SA:1/IKE established
[IKE2] SA:2/CHLD_SEND temporarily assigned
[IKE2] SA:3/CHLD_RECV temporarily assigned
[IKE2] SA:2/CHLD_SEND bound on SA:1/IKE
[IKE2] SA:3/CHLD_RECV bound on SA:1/IKE
[IKE2] SA:2/CHLD_SEND assigned policy TN:1/PY:1
[IKE2] SA:3/CHLD_RECV assigned policy TN:1/PY:1
[IKE2] GW:1/SA:1/AUTH exchange started
[IKE2] GW:1/SA:1/AUTH initiator 0
[IKE2] GW:1/SA:1/AUTH calculate iAuth data
:
:
[IKE2] SA:2/CHLD_SEND established
[IKE2] SA:3/CHLD_RECV established
IP Tunnel[1] Up
# packetdump lan2 infinity
# show log | grep LAN2
Searching ...
LAN2 OUT:IP UDP 192.168.88.1:4500 > *.*.*.*:4500
# packetdump lan2 off
以上です。
ヤマハ知らずなので、ご指摘あればお願いします。
後日追記
複数の IPsec トンネルを使い ECMP ルーティングで可用性を高めるサンプルです。
Magic WAN ではデフォルトで 2️ つのエンドポイント IP が付与されますので、それぞれの IP に対し 2 本づつ IPsec トンネルを張りました。
また、Gateway を併用しており、デフォルトルートをトンネルに向け、LAN 端末に Gateway でのセキュリティ機能を提供します。
yamaha
トンネルに共通の設定内容が多いので、tunnel template
を使いました。
ただ、古いバージョンだからか ipsec ike remote name
の部分がおかしくなったので、個別の設定で上書きしています。
ipsec ike remote address 12 a.b.c.d
ipsec ike remote name 12 a.b.c.d12 ipv4-addr <=== template 12 だと 最終オクテットの後に 12 がくっついた
設定例
console character ja.utf8
# デフォルトルートは4つのトンネル
ip route default gateway tunnel 1 gateway tunnel 2 gateway tunnel 3 gateway tunnel 4
# IPsec 対向と DNS リゾルバーはトンネルからブレイクアウトしダイレクト接続
ip route [Cloudflare IPsec エンドポイント(1) IPv4] gateway 192.168.88.254
ip route [Cloudflare IPsec エンドポイント(2) IPv4] gateway 192.168.88.254
ip route [Cloudflare IPv4 DNS リゾルバー(1) IPv4] gateway 192.168.88.254
ip route [Cloudflare IPv4 DNS リゾルバー(2) IPv4] gateway 192.168.88.254
ip lan1 address 192.168.100.1/24
ip lan2 address 192.168.88.1/24
tunnel select 1
#テンプレート化
tunnel template 2-4
ipsec tunnel 1
ipsec sa policy 1 1 esp aes256-cbc sha256-hmac anti-replay-check=off
ipsec ike version 1 2
ipsec ike encryption 1 aes256-cbc
ipsec ike group 1 modp2048
ipsec ike hash 1 sha256
ipsec ike keepalive log 1 off
ipsec ike keepalive use 1 on heartbeat 10 6
ipsec ike local address 1 192.168.88.1
ipsec ike local name 1 [Cloudflare IPsec エンドポイント(1) FQDN] fqdn
ipsec ike nat-traversal 1 on force=on
ipsec ike pfs 1 on
ipsec ike proposal-limitation 1 on
ipsec ike message-id-control 1 on
# 実際の鍵はちゃんと
ipsec ike pre-shared-key 1 text yamaha
ipsec ike remote address 1 [Cloudflare IPsec エンドポイント(1) IPv4]
ipsec ike remote name 1 [Cloudflare IPsec エンドポイント(1) IPv4] ipv4-addr
# Cloudflare の トンネル inteface address と /31 でペアに合わせる
ip tunnel address 10.255.255.6/31
ip tunnel mtu 1340
tunnel enable 1
tunnel select 2
ip tunnel address 10.255.255.8/31
ip tunnel mtu 1340
tunnel select 3
ip tunnel address 10.255.255.10/31
ip tunnel mtu 1340
tunnel select 4
ip tunnel address 10.255.255.12/31
ip tunnel mtu 1340
ipsec auto refresh on
ipsec ike local name 2 [Cloudflare IPsec エンドポイント(2) FQDN] fqdn
ipsec ike remote address 2 [Cloudflare IPsec エンドポイント(2) IPv4]
ipsec ike remote name 2 [Cloudflare IPsec エンドポイント(2) IPv4] ipv4-addr
ipsec ike local name 3 [Cloudflare IPsec エンドポイント(3) FQDN] fqdn
ipsec ike remote address 3 [Cloudflare IPsec エンドポイント(1) IPv4]
ipsec ike remote name 3 [Cloudflare IPsec エンドポイント(1) IPv4] ipv4-addr
ipsec ike local name 4 [Cloudflare IPsec エンドポイント(4) FQDN] fqdn
ipsec ike remote address 4 [Cloudflare IPsec エンドポイント(2) IPv4]
ipsec ike remote name 4 [Cloudflare IPsec エンドポイント(2) IPv4] ipv4-addr
telnetd host lan
dhcp service server
dhcp server rfc2131 compliant except remain-silent
dhcp scope 1 192.168.100.2-192.168.100.191/24
# Cloudflare の DNS locations から IPv4 を取ってくる
dns server [Cloudflare IPv4 DNS リゾルバー(1) IPv4] [Cloudflare IPv4 DNS リゾルバー(2) IPv4]
dns notice order dhcp me
statistics traffic on
Cloudflare 側で見ると、パケットが 4 つのトンネルを経由していることがわかります。
ヘルスモニターの状況です。
また、プライベートネットワークからの DNS クエリーが Cloudflare で Block されているのもわかります。
- ポリシー
- ログ
Yamaha ルーターを通じてプライベートネットワーク間およびインターネット向け通信の確立および制御を実装することができました。
Discussion