EdgeRouter X – 8. 自宅と実家の2つの LAN を拠点間 VPN でつなぐ ( GRE / IPsec )

続いて IPsec での拠点間 VPN ( site-to-site VPN ) の設定です。

IPv6 での設定例を追加しました。

EdgeRouter のヘルプ等を見るとまず始めに出てくるのがサブネット方式の設定です。この設定は簡単で手軽に2つの LAN を相互に通信できるようになりますが、この設定はルーティングできるトンネルがないので、これだけでは後述のいつでも地域制限のかかったサイトを見られるようにしたい場合に難があります。

ルーティングできるトンネルを作る場合は GRE を使うのが一般的ですが、この場合は基本的には WAN 側に固定 IP アドレスが必要になります。家庭用のインターネットで固定 IP を持っている人はそうは多くないですよね。しかし、そこは EdgeRouter です。なんとダイナミック IP アドレスでも GRE のトンネルを IPSec の上に張るやり方がありました。ループバックアドレスを使います。この設定が自分の中では最難関で、きちんと動作する設定を見出すのにかなり時間がかかりました。設定できた自分を褒めてあげたいです。対象ファームウェアは 1.9.1 です。

ルーティングが必要なく、単に2拠点が互いに通信(レイヤー3レベル)できるだけでよければ、サブネット方式として GUI で設定すれば簡単です。

site-to-site IPsec の種類

EdgeRouter では、 site-to-site IPsec を実現するやり方に大きく3つの種類があります。

  1. サブネット方式
  2. VTI
  3. GRE over IPsec

これらのメリットデメリットをまとめるとこんな感じです。

サブネット VTI GRE
設定 簡単 難しい 難しい
ルーティング 不可
ダイナミック IP 対応 非対応 非対応

サブネット方式

ヘルプのページやフォーラム等で一番設定例が多く簡単なのがサブネット方式ですが、これだと2拠点の LAN がただ相互にアクセスできるようになるだけで、トンネル経由のルーティングができません。つまり日本のサイトを見るにはせっかく拠点間 VPN があるというのに L2TP を使わなければならないと言うことです。なので今回は除外です。

VTI

VTI は site-to-site IPsec でルーティングが必要な場合の手段としてこちらもヘルプや設定例をよく見かけますが、 WAN 側の IP アドレスがダイナミックな場合動作しないのと、既存の L2TP サーバーの動作に支障をきたすので、これも除外します。

GRE

残るは GRE です。ルーテイングが必要な場合によく推奨される万能トンネルですが、 EdgeRouter のフォーラムやいろいろなブログ等を見ると基本的には「固定 IP アドレスでしか使えないものだ」とされています。ただしフォーラムで見つけた以下の2つのスレッドで、 ダイナミック IP アドレスでの GRE over IPsec の設定に成功してそうな例をみつけました。どうもヒントはループバックアドレス lo をトンネルの終端に使うことのようです。自分でも試したところ・・動きました!やったー!

Routed IP (VTI or GRE) over IPSec with dynamic peer?

My HowTo on multiple dynamic ospf-gre-ipsec tunnels

と書いてしまうと簡単ですが・・ここの設定にたどりつくまで半年かかりました。設定できた自分を褒めてあげたいです。そんな苦心作を、今日は惜しげも無く公開です。

前提条件

設定の前提となる条件は前回同様です。ダイナミック IP にホスト名と、 GRE が嫌がる条件ばかりです。

自宅 実家
DDNS yaberouter1.duckdns.org yaberouter2.duckdns.org
WAN 側 ポート eth0 pppoe0
WAN 側 IP アドレス ダイナミック / DHCP ダイナミック / PPPoE
LAN 側 ポート switch0 switch0
LAN 側 ネットワーク 192.168.1.0/24 192.168.2.0/24
ループバックアドレス 192.168.112.1/32 192.168.112.2/32
GRE トンネル IP アドレス 192.168.122.1/30 192.168.122.2/30

このような前提条件で、張り切ってダイナミック IP 使用時の GRE over site-to-site IPsec を設定してみます。


自宅側

まずは自宅側 ER-X から CLI で設定します。ループバックアドレスにプライベート IP アドレスを割り振り、それをトンネルの終端に使います。自宅側のトンネルの終端は 192.168.112.1/32 、実家側のトンネルの終端は 192.168.112.2/32 、GRE トンネル自身の IP アドレスは自宅側を 192.168.122.1/30 、実家側を 192.168.122.1/30 としました。 IPsec のシークレットはまたもや secret1 としましたが、任意のものに変更してください。

## 設定モードに入る
configure

## 基本的な IPsec の設定 ( L2TP のところで設定していれば不要 )
set vpn ipsec ipsec-interfaces interface eth0
set vpn ipsec nat-networks allowed-network 0.0.0.0/0
set vpn ipsec nat-traversal enable
set vpn ipsec auto-firewall-nat-exclude enable

## IPsec の ESP/IKE を設定する
set vpn ipsec esp-group ESP-1
set vpn ipsec esp-group ESP-1 compression disable
set vpn ipsec esp-group ESP-1 lifetime 3600
set vpn ipsec esp-group ESP-1 mode tunnel
set vpn ipsec esp-group ESP-1 pfs enable
set vpn ipsec esp-group ESP-1 proposal 1 encryption aes256
set vpn ipsec esp-group ESP-1 proposal 1 hash sha1
set vpn ipsec esp-group ESP-1 proposal 2 encryption 3des
set vpn ipsec esp-group ESP-1 proposal 2 hash md5
set vpn ipsec ike-group IKE-1
set vpn ipsec ike-group IKE-1 key-exchange ikev1
set vpn ipsec ike-group IKE-1 lifetime 3600
set vpn ipsec ike-group IKE-1 proposal 1 dh-group 2
set vpn ipsec ike-group IKE-1 proposal 1 encryption aes256
set vpn ipsec ike-group IKE-1 proposal 1 hash sha1
set vpn ipsec ike-group IKE-1 proposal 2 dh-group 2
set vpn ipsec ike-group IKE-1 proposal 2 encryption aes128
set vpn ipsec ike-group IKE-1 proposal 2 hash sha1

## トンネルの自宅側終端として使うループバックアドレスを設定
set interfaces loopback lo address 192.168.112.1/32

## site-to-site IPsec トンネルを設定
set vpn ipsec site-to-site peer yaberouter2.duckdns.org 
set vpn ipsec site-to-site peer yaberouter2.duckdns.org authentication id yaberouter1.duckdns.org
set vpn ipsec site-to-site peer yaberouter2.duckdns.org authentication mode pre-shared-secret
set vpn ipsec site-to-site peer yaberouter2.duckdns.org authentication pre-shared-secret secret1
set vpn ipsec site-to-site peer yaberouter2.duckdns.org authentication remote-id yaberouter2.duckdns.org
set vpn ipsec site-to-site peer yaberouter2.duckdns.org connection-type initiate
set vpn ipsec site-to-site peer yaberouter2.duckdns.org default-esp-group ESP-1
set vpn ipsec site-to-site peer yaberouter2.duckdns.org description ipsec-1-to-2
set vpn ipsec site-to-site peer yaberouter2.duckdns.org ike-group IKE-1
set vpn ipsec site-to-site peer yaberouter2.duckdns.org dhcp-interface eth0
set vpn ipsec site-to-site peer yaberouter2.duckdns.org tunnel 1
set vpn ipsec site-to-site peer yaberouter2.duckdns.org tunnel 1 allow-nat-networks disable
set vpn ipsec site-to-site peer yaberouter2.duckdns.org tunnel 1 allow-public-networks disable
set vpn ipsec site-to-site peer yaberouter2.duckdns.org tunnel 1 local prefix 192.168.112.1/32
set vpn ipsec site-to-site peer yaberouter2.duckdns.org tunnel 1 remote prefix 192.168.112.2/32

## GRE トンネルを作成
set interfaces tunnel tun0
set interfaces tunnel tun0 address 192.168.122.1/30
set interfaces tunnel tun0 description gre-1-to-2
set interfaces tunnel tun0 encapsulation gre
set interfaces tunnel tun0 local-ip 192.168.112.1
set interfaces tunnel tun0 mtu 1354
set interfaces tunnel tun0 multicast enable
set interfaces tunnel tun0 remote-ip 192.168.112.2
set interfaces tunnel tun0 ttl 255

## 実家側の LAN にアクセスする時に GRE を使うよう Static Route 設定
set protocols static interface-route 192.168.2.0/24 next-hop-interface tun0

## OpenVPN の Static Route は削除しておく
delete protocols static interface-route 192.168.2.0/24 next-hop-interface vtun0

## 設定を保存する
commit
save

## Operational Mode に戻る
exit

つづいて Firewall で GRE を通すようルールを追加します。

ER-X に管理者アカウントでログインし、 Firewall/NAT タブをクリック
Firewall Policies タブをクリック
WAN_LOCAL の Actions ボタンを押し、 Edit Ruleset を選ぶ

Add New Rule ボタンを押す
[Basic]
Description: Allow GRE
Action: Accept
Protocol: Choose a protocal by name > gre
Save ボタンを押す

追加したルールを元からある Allow established/related と Drop invalid state の間に移動する
Save Rule Order ボタンを押す
WAN_LOCAL の設定ウィンドウを閉じる

今回のトンネルではフレッツの PPPoE + IPSec + GRE という環境下で問題が出ないよう MTU をコンサバに 1354 と設定しています。が、念には念を入れて MSS Clamping も MTU に合わせて変更しておきます。 PPPoE や GRE に合わせて色々変えるのも面倒なので、全部のインターフェースに対しまるっと 1314 を設定してやります。

管理画面の Wizard タブをクリック
TCP MSS clamping をクリック
Enable MSS clamping for TCP connections にチェック
Interface Types: All
MSS: 1314
Apply ボタンを押す

実家側

続いて実家の ER-X を CLI で設定します。実家側のトンネルの終端は 192.168.112.2/32 、 GRE トンネル自身の IP アドレスは 192.168.122.2/30 、としました。

## 設定モードに入る
configure

## 基本的な IPsec の設定 ( L2TP のところで設定していれば不要 )
set vpn ipsec ipsec-interfaces interface pppoe0
set vpn ipsec nat-networks allowed-network 0.0.0.0/0
set vpn ipsec nat-traversal enable
set vpn ipsec auto-firewall-nat-exclude enable

## IPsec の ESP/IKE を設定する
set vpn ipsec esp-group ESP-1
set vpn ipsec esp-group ESP-1 compression disable
set vpn ipsec esp-group ESP-1 lifetime 3600
set vpn ipsec esp-group ESP-1 mode tunnel
set vpn ipsec esp-group ESP-1 pfs enable
set vpn ipsec esp-group ESP-1 proposal 1 encryption aes256
set vpn ipsec esp-group ESP-1 proposal 1 hash sha1
set vpn ipsec esp-group ESP-1 proposal 2 encryption 3des
set vpn ipsec esp-group ESP-1 proposal 2 hash md5
set vpn ipsec ike-group IKE-1
set vpn ipsec ike-group IKE-1 key-exchange ikev1
set vpn ipsec ike-group IKE-1 lifetime 3600
set vpn ipsec ike-group IKE-1 proposal 1 dh-group 2
set vpn ipsec ike-group IKE-1 proposal 1 encryption aes256
set vpn ipsec ike-group IKE-1 proposal 1 hash sha1
set vpn ipsec ike-group IKE-1 proposal 2 dh-group 2
set vpn ipsec ike-group IKE-1 proposal 2 encryption aes128
set vpn ipsec ike-group IKE-1 proposal 2 hash sha1

## トンネルの自宅側終端として使うループバックアドレスを設定
set interfaces loopback lo address 192.168.112.2/32

## site-to-site IPsec トンネルを設定
## pppoe0 では例のごとく dhcp-interface が使えない
set vpn ipsec site-to-site peer yaberouter1.duckdns.org 
set vpn ipsec site-to-site peer yaberouter1.duckdns.org authentication id yaberouter2.duckdns.org
set vpn ipsec site-to-site peer yaberouter1.duckdns.org authentication mode pre-shared-secret
set vpn ipsec site-to-site peer yaberouter1.duckdns.org authentication pre-shared-secret secret1
set vpn ipsec site-to-site peer yaberouter1.duckdns.org authentication remote-id yaberouter1.duckdns.org
set vpn ipsec site-to-site peer yaberouter1.duckdns.org connection-type initiate
set vpn ipsec site-to-site peer yaberouter1.duckdns.org default-esp-group ESP-1
set vpn ipsec site-to-site peer yaberouter1.duckdns.org description ipsec-2-to-1
set vpn ipsec site-to-site peer yaberouter1.duckdns.org ike-group IKE-1
set vpn ipsec site-to-site peer yaberouter1.duckdns.org local-address 0.0.0.0
set vpn ipsec site-to-site peer yaberouter1.duckdns.org tunnel 1
set vpn ipsec site-to-site peer yaberouter1.duckdns.org tunnel 1 allow-nat-networks disable
set vpn ipsec site-to-site peer yaberouter1.duckdns.org tunnel 1 allow-public-networks disable
set vpn ipsec site-to-site peer yaberouter1.duckdns.org tunnel 1 local prefix 192.168.112.2/32
set vpn ipsec site-to-site peer yaberouter1.duckdns.org tunnel 1 remote prefix 192.168.112.1/32

## GRE トンネルを作成
set interfaces tunnel tun0
set interfaces tunnel tun0 address 192.168.122.2/30
set interfaces tunnel tun0 description gre-2-to-1
set interfaces tunnel tun0 encapsulation gre
set interfaces tunnel tun0 local-ip 192.168.112.2
set interfaces tunnel tun0 mtu 1354
set interfaces tunnel tun0 multicast enable
set interfaces tunnel tun0 remote-ip 192.168.112.1
set interfaces tunnel tun0 ttl 255

## 自宅側の LAN にアクセスする時に GRE トンネルを使うよう Static Route 設定
set protocols static interface-route 192.168.1.0/24 next-hop-interface tun0

## OpenVPN の Static Route は削除しておく
delete protocols static interface-route 192.168.1.0/24 next-hop-interface vtun0

## 設定を保存する
commit
save

## Operational Mode に戻る
exit

つづいて Firewall で GRE を通すようルールを追加します。

ER-X に管理者アカウントでログインし、 Firewall/NAT タブをクリック
Firewall Policies タブをクリック
WAN_LOCAL の Actions ボタンを押し、 Edit Ruleset を選ぶ

Add New Rule ボタンを押す
[Basic]
Description: Allow gre
Action: Accept
Protocol: Choose a protocal by name > gre
Save ボタンを押す

追加したルールを元からある Allow established/related と Drop invalid state の間に移動する
Save Rule Order ボタンを押す
WAN_LOCAL の設定ウィンドウを閉じる

こちら側でも MSS Clamping を変更しておきます。

管理画面の Wizard タブをクリック
TCP MSS clamping をクリック
Enable MSS clamping for TCP connections にチェック
Interface Types: All
MSS: 1314
Apply ボタンを押す

さて、これで OpenVPN の時と同じく L2TP 等使わなくても反対側の LAN にアクセスできるようになれば成功です。うまく動いたのであれば OpenVPN の設定は削除してしまえばいいと思います。

しかしこのコマンドを一字一句間違えずに入力できる人っているんでしょうか。こんなコマンドを入力せず使える Mac の素敵さを改めて噛み締めてしまいます。


IPv6 を利用する

さて、これまでは家庭用インターネットの IPv4 アドレスを利用して GRE over IPsec トンネルを設定しましたが、このやり方は下記のようにやや複雑になってます。

  • WAN IPv4 アドレスはダイナミック
  • GRE は固定アドレスでしか使えないので、プライベート IP のループバックを使う
  • ループバック同士を IPsec Policy Based Tunnel で結ぶ
  • IPsec トンネルもダイナミック IP が直接使えず FQDN を使う
  • ファイアウォールを IPsec と GRE 両方が通るようにする

そもそも GRE や IPsec がダイナミック IP アドレスや NAT をあまり考慮しないで設計されてしまったプロトコルなので、このように複雑になってしまいます。しかし、ここで IPv6 を GRE のトンネルに使えば、このような悩みが解消します。

  • IPv6 はだいたい固定アドレス、かつグローバル IP アドレス
  • なので GRE のトンネルがルーターの IPv6 アドレス間に直接設定できる
  • IPsec は Transport Mode でルーターの IPv6 アドレス間を直接暗号化できる
  • ファイアウォールは両ルーターの IPv6 アドレスを通すように設定するだけ

これでだいぶシンプルに設定できます。 EdgeRouter はファームウェア 2.0.9 でだいぶ IPv6 GRE と IPv6 IPsec が安定して使えるようになってます。それでは GRE / IPsec を IPv6 でやった場合の設定例です。

下記では、 EdgeRouter で IPv6 を使うための初期設定は済んでるものとします。アメリカでも日本でも、 EdgeRouter の配下にも IPv6 を流す DHCP-PD の設定とか難しいことが必要でなければ、 set interfaces ethernet eth0 address ipv6 autoconf を設定すれば多分しばらくすると WAN IPv6 アドレスが割り当てられると思います。もちろん Setup Wizards 等を使って基本的な IPv6 用のファイアウォールの設定などお忘れなく。

IPv6 前提条件

自宅 実家
DDNS 不要
WAN 側 ポート eth0 eth0
WAN 側 IP アドレス 2600:XXXX::1/64 2400:XXXX::1/64
LAN 側 ポート switch0 switch0
LAN 側 ネットワーク 192.168.1.0/24 192.168.2.0/24
ループバック不要
GRE トンネル IP アドレス 192.168.122.1/30 192.168.122.2/30

このような前提条件で、 IPv6 GRE over IPv6 IPsec を設定してみます。


IPv6 自宅側

まずは自宅側 ER-X から CLI で設定します。自宅側のトンネルの終端は 2600:XXXX::1/64 、実家側のトンネルの終端は 2400:XXXX::1/64 、GRE トンネル自身の IP アドレスは自宅側を 192.168.122.1/30 、実家側を 192.168.122.1/30 としました。 IPsec のシークレットはまたもや secret1 としましたが、任意のものに変更してください。

## 設定モードに入る
configure

## 基本的な IPsec の設定 ( L2TP のところで設定していれば不要 )
set vpn ipsec ipsec-interfaces interface eth0
set vpn ipsec nat-networks allowed-network 0.0.0.0/0
set vpn ipsec nat-traversal enable
set vpn ipsec auto-firewall-nat-exclude enable

## IPsec の ESP/IKE を設定する
set vpn ipsec esp-group ESP-1
set vpn ipsec esp-group ESP-1 compression disable
set vpn ipsec esp-group ESP-1 lifetime 3600
set vpn ipsec esp-group ESP-1 mode trasnport
set vpn ipsec esp-group ESP-1 pfs enable
set vpn ipsec esp-group ESP-1 proposal 1 encryption aes256
set vpn ipsec esp-group ESP-1 proposal 1 hash sha1
set vpn ipsec esp-group ESP-1 proposal 2 encryption 3des
set vpn ipsec esp-group ESP-1 proposal 2 hash md5
set vpn ipsec ike-group IKE-1
set vpn ipsec ike-group IKE-1 key-exchange ikev1
set vpn ipsec ike-group IKE-1 lifetime 3600
set vpn ipsec ike-group IKE-1 proposal 1 dh-group 2
set vpn ipsec ike-group IKE-1 proposal 1 encryption aes256
set vpn ipsec ike-group IKE-1 proposal 1 hash sha1
set vpn ipsec ike-group IKE-1 proposal 2 dh-group 2
set vpn ipsec ike-group IKE-1 proposal 2 encryption aes128
set vpn ipsec ike-group IKE-1 proposal 2 hash sha1

## site-to-site IPsec トンネルを設定
set vpn ipsec site-to-site peer 2400:XXXX::1 
set vpn ipsec site-to-site peer 2400:XXXX::1 authentication id router1
set vpn ipsec site-to-site peer 2400:XXXX::1 authentication mode pre-shared-secret
set vpn ipsec site-to-site peer 2400:XXXX::1 authentication pre-shared-secret secret1
set vpn ipsec site-to-site peer 2400:XXXX::1 authentication remote-id router2
set vpn ipsec site-to-site peer 2400:XXXX::1 connection-type initiate
set vpn ipsec site-to-site peer 2400:XXXX::1 default-esp-group ESP-1
set vpn ipsec site-to-site peer 2400:XXXX::1 description ipsec-1-to-2
set vpn ipsec site-to-site peer 2400:XXXX::1 ike-group IKE-1
set vpn ipsec site-to-site peer 2400:XXXX::1 local-address 2600:XXXX::1
set vpn ipsec site-to-site peer 2400:XXXX::1 tunnel 1
set vpn ipsec site-to-site peer 2400:XXXX::1 tunnel 1 esp-group ESP-1
set vpn ipsec site-to-site peer 2400:XXXX::1 tunnel 1 allow-nat-networks disable
set vpn ipsec site-to-site peer 2400:XXXX::1 tunnel 1 allow-public-networks disable

## IPv4 over IPv6 GRE トンネルを作成
set interfaces ipv6-tunnel v6tun0
set interfaces ipv6-tunnel v6tun0 address 192.168.122.1/30
set interfaces ipv6-tunnel v6tun0 description gre-1-to-2
set interfaces ipv6-tunnel v6tun0 encapsulation ip6gre
set interfaces ipv6-tunnel v6tun0 local-ip 2600:XXXX::1
set interfaces ipv6-tunnel v6tun0 mtu 1448
set interfaces ipv6-tunnel v6tun0 multicast enable
set interfaces ipv6-tunnel v6tun0 remote-ip 2400:XXXX::1
set interfaces ipv6-tunnel v6tun0 ttl 255

## 実家側の LAN にアクセスする時に GRE を使うよう Static Route 設定
set protocols static interface-route 192.168.2.0/24 next-hop-interface v6tun0

## OpenVPN の Static Route は削除しておく
delete protocols static interface-route 192.168.2.0/24 next-hop-interface vtun0

## 設定を保存する
commit
save

## Operational Mode に戻る
exit

つづいて Firewall で 実家の WAN 側 IPv6 を通すようルールを追加します。 IP アドレスで許可しているので、 GRE も IPsec も通るようになります。

set firewall ipv6-name WANv6_LOCAL rule 20 action accept
set firewall ipv6-name WANv6_LOCAL rule 20 description Allow-wan-ip6
set firewall ipv6-name WANv6_LOCAL rule 20 source address 2400:XXXX::1

MSS Clamping は引き続き必要です。全部のインターフェースに対しまるっと 1408 を設定してやります。

管理画面の Wizard タブをクリック
TCP MSS clamping をクリック
Enable MSS clamping for TCP connections にチェック
Interface Types: All
MSS: 1408
Apply ボタンを押す

IPv6 実家側

それでは実家側です。自宅側のトンネルの終端は 2600:XXXX::1/64 、実家側のトンネルの終端は 2400:XXXX::1/64 、GRE トンネル自身の IP アドレスは自宅側を 192.168.122.1/30 、実家側を 192.168.122.1/30 としました。 IPsec のシークレットはまたもや secret1 としましたが、任意のものに変更してください。

## 設定モードに入る
configure

## 基本的な IPsec の設定 ( L2TP のところで設定していれば不要 )
set vpn ipsec ipsec-interfaces interface eth0
set vpn ipsec nat-networks allowed-network 0.0.0.0/0
set vpn ipsec nat-traversal enable
set vpn ipsec auto-firewall-nat-exclude enable

## IPsec の ESP/IKE を設定する
set vpn ipsec esp-group ESP-1
set vpn ipsec esp-group ESP-1 compression disable
set vpn ipsec esp-group ESP-1 lifetime 3600
set vpn ipsec esp-group ESP-1 mode trasnport
set vpn ipsec esp-group ESP-1 pfs enable
set vpn ipsec esp-group ESP-1 proposal 1 encryption aes256
set vpn ipsec esp-group ESP-1 proposal 1 hash sha1
set vpn ipsec esp-group ESP-1 proposal 2 encryption 3des
set vpn ipsec esp-group ESP-1 proposal 2 hash md5
set vpn ipsec ike-group IKE-1
set vpn ipsec ike-group IKE-1 key-exchange ikev1
set vpn ipsec ike-group IKE-1 lifetime 3600
set vpn ipsec ike-group IKE-1 proposal 1 dh-group 2
set vpn ipsec ike-group IKE-1 proposal 1 encryption aes256
set vpn ipsec ike-group IKE-1 proposal 1 hash sha1
set vpn ipsec ike-group IKE-1 proposal 2 dh-group 2
set vpn ipsec ike-group IKE-1 proposal 2 encryption aes128
set vpn ipsec ike-group IKE-1 proposal 2 hash sha1

## site-to-site IPsec トンネルを設定
set vpn ipsec site-to-site peer 2600:XXXX::1 
set vpn ipsec site-to-site peer 2600:XXXX::1 authentication id router2
set vpn ipsec site-to-site peer 2600:XXXX::1 authentication mode pre-shared-secret
set vpn ipsec site-to-site peer 2600:XXXX::1 authentication pre-shared-secret secret1
set vpn ipsec site-to-site peer 2600:XXXX::1 authentication remote-id router1
set vpn ipsec site-to-site peer 2600:XXXX::1 connection-type initiate
set vpn ipsec site-to-site peer 2600:XXXX::1 default-esp-group ESP-1
set vpn ipsec site-to-site peer 2600:XXXX::1 description ipsec-2-to-1
set vpn ipsec site-to-site peer 2600:XXXX::1 ike-group IKE-1
set vpn ipsec site-to-site peer 2600:XXXX::1 local-address 2400:XXXX::1
set vpn ipsec site-to-site peer 2600:XXXX::1 tunnel 1
set vpn ipsec site-to-site peer 2600:XXXX::1 tunnel 1 esp-group ESP-1
set vpn ipsec site-to-site peer 2600:XXXX::1 tunnel 1 allow-nat-networks disable
set vpn ipsec site-to-site peer 2600:XXXX::1 tunnel 1 allow-public-networks disable
## これで IPsec Transport Mode になり、 2600:XXXX::1 - 2400:XXXX::1 のパケットが暗号化

## IPv4 over IPv6 GRE トンネルを作成
set interfaces ipv6-tunnel v6tun0
set interfaces ipv6-tunnel v6tun0 address 192.168.122.2/30
set interfaces ipv6-tunnel v6tun0 description gre-2-to-1
set interfaces ipv6-tunnel v6tun0 encapsulation ip6gre
set interfaces ipv6-tunnel v6tun0 local-ip 2400:XXXX::1
set interfaces ipv6-tunnel v6tun0 mtu 1448
set interfaces ipv6-tunnel v6tun0 multicast enable
set interfaces ipv6-tunnel v6tun0 remote-ip 2600:XXXX::1
set interfaces ipv6-tunnel v6tun0 ttl 255

## 自宅側の LAN にアクセスする時に GRE を使うよう Static Route 設定
set protocols static interface-route 192.168.1.0/24 next-hop-interface v6tun0

## OpenVPN の Static Route は削除しておく
delete protocols static interface-route 192.168.1.0/24 next-hop-interface vtun0

## 設定を保存する
commit
save

## Operational Mode に戻る
exit

つづいて Firewall で 自宅の WAN 側 IPv6 を通すようルールを追加します。 IP アドレスで許可しているので、 GRE も IPsec も通るようになります。

set firewall ipv6-name WANv6_LOCAL rule 20 action accept
set firewall ipv6-name WANv6_LOCAL rule 20 description Allow-wan-ip6
set firewall ipv6-name WANv6_LOCAL rule 20 source address 2600:XXXX::1

MSS Clamping は引き続き必要です。全部のインターフェースに対しまるっと 1408 を設定してやります。

管理画面の Wizard タブをクリック
TCP MSS clamping をクリック
Enable MSS clamping for TCP connections にチェック
Interface Types: All
MSS: 1408
Apply ボタンを押す

ダイナミックでもプライベートでもない IPv6 アドレスで設定できるので、ずいぶんコマンドがスッキリしましたね。

おわりに

今回は当然ながらこのページを大いに参考にしました。

EdgeRouter – IPsec Dynamic Site-to-Site VPN using FQDNs

Routed IP (VTI or GRE) over IPSec with dynamic peer?

My HowTo on multiple dynamic ospf-gre-ipsec tunnels

この2つページのおかげで今の自分があると言っても過言ではありません。このスレッドを書いたユーザーの方には厚く御礼申し上げます。そしてこの設定を使えば、家庭用のインターネットを使っているほぼすべての人々に、 GRE over IPsec を使う道が拓けます。

あ、ちなみに最近では公式でも同じようなやり方が載るようになりました。もっと早く教えてよ・・

EdgeRouter – EoGRE Layer 2 Tunnel

以上、お疲れ様でした。これで峠は越しました。


yabe.jp » Gadgets » EdgeRouter X – 8. 自宅と実家の2つの LAN を拠点間 VPN でつなぐ ( GRE / IPsec )