🪁

ヤマハルーターで Cloudflare Magic WAN 接続

2024/09/18に公開

ヤマハのルーターで 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-saipsec ike duration isakmp-sa
    試験用:リキー見るため短く指定
  • ipsec ike log 1 key-info message-info payload-infosyslog 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