2地点間でLayer2 のVirtutal Bridge を構成する必要があり EdgeRouter X を使って、IPv4 で L2TPv3 over IPsec の設定をしてみた。
実際は同じセグメント内で Virtual Bridge をVirtual Private Network(VPN)を利用して構成したいだけだが、特殊な状況で、セグメント内だが、IPアドレスが Dynamic で固定できない。Dynamic IP を扱うには IPsec の利用が必要のようだ。IPsec上で Layer 2 (L2) ブリッジを構成するには L2TPv3 が簡単そうなので、それを使うことにした。
同一セグメント内なので Multicast DNS (mDNS)でできないかと思ったが、EdgeRouter X ではうまく、IPsec のサイト名としてうまく使えなかった。しかたがないので、Dynamic DNS (DDNS)を使っている。
最近は IPv6 で設定する場合が多いと思うが、IPv4 を利用した設定の備忘録として記録しておく。
設定にあたっては、以下のサイトが参考になった。
EdgeRouter – Dynamic Site-to-Site IPsec VPN using FQDNs
EdgeRouter 6P – 12. 自宅と実家を L2 VPN で一体化する ( L2TPv3 Bridging )
EdgeRouter X – 14. L2 VPN アプライアンスとして使う
格安ルータ「EdgeRouter」でフレッツ NGN 網折り返し拠点間 L2VPN(L2TPv3/IPSec over IPv6)を構築する
目次
環境・機材
Dynamic DNS には 無料の duckdns.org を利用した。
EdgeRouter X のバージョンは、v2.0.9-hotfix.4 を利用した。
EdgeMAX OS の GUI画面から VPN、ConfigTree、Wizardsのタブを利用して設定を行った。
構成の概要を次の図に示す。
XXXXXXX-ivy1 (以下では単に ivy1とする) の eth4 と XXXXXXX-ivy2 (以下では単に ivy2とする)の eth4 でL2 Bridge を構成する。
- ivy1
- eth0: インターネットへの接続 (DHCP)
- eth1, eth2, eth3: 192.168.11.0/24, DHCP有効 PCを接続する
- eth4: L2TPv3 VPN
- ivy2
- eth0: インターネットへの接続 (DHCP)
- eth1, eth2, eth3: 192.168.22.0/24, DHCP有効 PCを接続する
- eth4: L2TPv3 VPN
EdgeRouter X (ivy1)の設定
まず、1台のEdgeRouter X の設定を示す。2台目も基本的に同じことであるが、後で設定を示す。2台目の方が設定手順などで手戻りがなかったので、2台目の方が細部ではより正確と思う。
EdgeRouter X を hardware reset した状態から設定した。
eth0 に PCを接続し、PCのIPアドレスを192.168.1.2/24、192.168.1.1をゲートウェイアドレスに設定して基本設定をした。
Basic Setup で LANに 192.168.11.1/24 を設定した。
リブートをして設定を確認。
Dynamic DNS の設定
eth1 (eth2, eth3でも可) に PCを接続し、設定を進めていく。
Services タブ → DNS タブ → Dynamic DNS を使って設定をした。
しかし、設定を確認すると interface が other null になってしまう。しかたがないので、ConfigTree から eth0 で設定した。
- services
- dns
- dynamic
- interface
- eth0
- service: add custom-duckdns
- custom-duckdns: add XXXXXXX-ivy1
- login: nouser
- password: Duck DNS で指定されているもの
- protocol: dyndns2
- server: www.duckdns.org
- custom-duckdns: add XXXXXXX-ivy1
- service: add custom-duckdns
- eth0
- interface
- dynamic
- dns
IPsec Site-to-Site接続の設定
VPN タブ → IPsec Site-to-Site タブで IPsec の設定をした。
- Peer: XXXXXXX-ivy2.duckdns.org
- Description: peer2 (何でも)
- Local IP: any
- Pre-shared secret: ivy1 と ivy2 で共通になるよう決めたもの
- Local subnet: 192.168.11.0/24
- Remote subnet: 192.168.22.0/24
ファイアウォール設定
Firewall/NATタブのFirewall Policies でファイアウォール設定を詳細にした方が良い場合もあるであろうが、IPsec Site-to-Site設定で作成されるデフォルトのファイアウォールのままにしてある。
IPsec Site-to-Site接続の確認
Peer(ここではivy2)もIPsec Site-to-Site接続の設定済みなら、 Wizards タブの VPN status を確認することで、IPsec による Site-to-Site 接続ができていることを確認できる。うまく接続できていれば、しばらくするとVPN Status List の Statusが down から up になるはず。
また、ivy1 に接続したPCから ivy2 に接続したPC (192.168.22.39とする) に Ping を送って適切な応答があることを確認する。
PS C:\Users\XXXXXXXX> ping 192.168.22.39 192.168.22.39 に ping を送信しています 32 バイトのデータ: 192.168.22.39 からの応答: バイト数 =32 時間 =1ms TTL=126 192.168.22.39 からの応答: バイト数 =32 時間 =2ms TTL=126 192.168.22.39 からの応答: バイト数 =32 時間 =1ms TTL=126 192.168.22.39 からの応答: バイト数 =32 時間 =2ms TTL=126 192.168.22.39 の ping 統計: パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、 ラウンド トリップの概算時間 (ミリ秒): 最小 = 1ms、最大 = 2ms、平均 = 1ms
スイッチの設定
EdgeRouter X の Ethernetポート eth4 を L2 Bridge に利用する設定を行う。このため、switch0 から取り除く。
ConfigTreeタブ の interfaces / switch / switch0 / switch-port / interface のパネルから インタフェース eth4 を削除する。
L2TPv3 の設定
L2TPv3 の設定をするために、L2TPv3の端点となる bridgeインタフェース、L2TPv3インタフェースの作成を行う。
Bridgeの作成・設定
ConfigTreeタブ の interfaces / bridge のパネルで br1 を作成し、設定を行う。
- interfaces
- bridge: add br1
- br1
- multicast: enable
- promiscous: enable
- br1
- bridge: add br1
インタフェース l2tpeth1 の作成・設定
ConfigTreeタブ の interfaces / l2tpv3 のパネルでインタフェース l2tpeth1 を作成する。
以下の例では、port, session-id, tunnel-id で桁数を変えてある。
- interfaces
- l2tpv3: add l2tpeth1
- l2tpeth1
- description: L2TPv3 ivy1 (なんでも良い)
- destination-port: 22000
- encapsulation: udp
- local-ip: 192.168.11.1
- peer-session-id: 2200
- peer-tunnel-id: 220
- remote-ip: 192.168.22.1
- session-id: 1100
- source-port 11000
- tunnel-id: 110
- l2tpeth1
- l2tpv3: add l2tpeth1
ConfigTreeタブ の interfaces / l2tpv3 / l2tpeth1 / bridge-group に br1 を設定する。
- interfaces
- l2tpv3
- l2tpeth1
- bridge-group
- bridge: br1
- bridge-group
- l2tpeth1
- l2tpv3
Ethernet ポート eth4 の設定
ConfigTreeタブ の interfaces / ethernet / eth4 / bridge-group を br1に設定する。
TCP MSS Clamping
VPNを使っているので、TCP Maximum Segment Size (MSS) を調整する TCP MSS Clamping を有効にする。
EdgeRouter X (ivy2)の設定
EdgeRouter X を hardware reset した状態から設定した。
eth0 に PCを接続し、PCのIPアドレスを192.168.1.2/24、192.168.1.1をゲートウェイアドレスに設定して基本設定をした。
Basic Setup で LANに 192.168.22.1/24 を設定した。設定を反映させるために Restart する。
EdgeRouter X のホスト名の設定
ホスト名を EdgeRouter-X-ivy2 にする。
ホスト名を変更した後にはダッシュボードの左上が変わる。
Dynamic DNS のivy2での設定
eth1 (eth2, eth3でも可) に PCを接続し、設定を進めていく。
Services タブ → DNS タブ → Dynamic DNS を使って設定をしてみたが、ivy1と同じことなので、 interface が other null になってしまう。
そこで、ConfigTree から null を削除し、 eth0 を追加して設定した。
- services
- dns
- dynamic
- interface
- eth0
- service: add custom-duckdns
- custom-duckdns: add XXXXXXX-ivy2
- login: nouser
- password: Duck DNS で指定されているもの
- protocol: dyndns2
- server: www.duckdns.org
- custom-duckdns: add XXXXXXX-ivy2
- service: add custom-duckdns
- eth0
- interface
- dynamic
- dns
IPsec Site-to-Site接続のivy2での設定
VPN タブ → IPsec Site-to-Site タブで IPsec の設定をした。
- Peer: XXXXXXX-ivy1.duckdns.org
- Description: peer1 (何でも)
- Local IP: any
- Pre-shared secret: ivy1 と ivy2 で共通になるよう決めたもの
- Local subnet: 192.168.22.0/24
- Remote subnet: 192.168.11.0/24
ファイアウォールのivy2での設定
Firewall/NATタブのFirewall Policies でファイアウォール設定を詳細にした方が良い場合もあるであろうが、IPsec Site-to-Site設定で作成されるデフォルトのファイアウォールのままにしてある。
IPsec Site-to-Site接続の確認
Peer(ここではivy1)も設定済みなら、 Wizards タブの Feature Wizards の中のVPN status を確認することで、IPsec による Site-to-Site 接続ができていることを確認できる。
また、ivy2 に接続したPCから ivy1 に接続したPC (192.168.11.40とする) に Ping を送って適切な応答があることを確認する。
PS C:\Users\XXXXXX> ping 192.168.11.40 192.168.11.40 に ping を送信しています 32 バイトのデータ: 192.168.11.40 からの応答: バイト数 =32 時間 =2ms TTL=126 192.168.11.40 からの応答: バイト数 =32 時間 =2ms TTL=126 192.168.11.40 からの応答: バイト数 =32 時間 =1ms TTL=126 192.168.11.40 からの応答: バイト数 =32 時間 =2ms TTL=126 192.168.11.40 の ping 統計: パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、 ラウンド トリップの概算時間 (ミリ秒): 最小 = 1ms、最大 = 2ms、平均 = 1ms
スイッチのivy2での設定
EdgeRouter X の Ethernetポート eth4 を L2 Bridge に利用する設定を行う。このため、switch0 から取り除く。
ConfigTreeタブ の interfaces / switch / switch0 / switch-port / interface のパネルから インタフェース eth4 を削除する。
L2TPv3 のivy2での設定
L2TPv3 の設定をするために、L2TPv3の端点となる bridgeインタフェース、L2TPv3インタフェースの作成を行う。
Bridge br2の作成・設定
ConfigTreeタブ の interfaces / bridge のパネルで br2 を作成し、設定を行う。
- interfaces
- bridge: add br2
-
- br2
- multicast: enable
- promiscous: enable
- br2
-
- bridge: add br2
インタフェース l2tpeth2 の作成・設定
ConfigTreeタブ の interfaces / l2tpv3 のパネルでインタフェース l2tpeth2 を作成する。
ConfigTreeタブ の interfaces / l2tpv3 / l2tpeth1 / bridge-group に br2 を設定する。
以下の例では、port, session-id, tunnel-id で桁数を変えてある。
- interfaces
- l2tpv3: add l2tpeth2
- l2tpeth2
- description: L2TPv3 ivy2 (なんでも良い)
- destination-port: 11000
- encapsulation: udp
- local-ip: 192.168.22.1
- peer-session-id: 1100
- peer-tunnel-id: 110
- remote-ip: 192.168.11.1
- session-id: 2200
- source-port 22000
- tunnel-id: 220
- bridge-group
- bridge: br2
- l2tpeth2
- l2tpv3: add l2tpeth2
Ethernet ポート eth4 へ br2 の設定
ConfigTreeタブ の interfaces / ethernet / eth4 / bridge-group を br2に設定して、L2TPv3 と eth4 が br2 でブリッジされるようにする。
TCP MSS Clamping
VPNを使っているので、TCP Maximum Segment Size (MSS) を調整する TCP MSS Clamping を有効にする。
Restart をして設定を反映させる。
L2TPv3 接続の確認
設定後に再起動してしばらくしてから Dashboard を見ることで、L2TPv3 の l2tpeth1 が Connected になっていれば接続されていることを確認できる。
ivy2 の eth4 をたとえば 192.168.1.0/24 のDHCPが有効になっているLANに接続し、 ivy1 の eth4 に PC を接続する。ping によって ivy2のeth4が接続されているルータ 192.168.1.1 から応答を得ることができる。
PS C:\Users\XXXXXXXX> ping 192.168.1.1 192.168.1.1 に ping を送信しています 32 バイトのデータ: 192.168.1.1 からの応答: バイト数 =32 時間 =2ms TTL=64 192.168.1.1 からの応答: バイト数 =32 時間 =2ms TTL=64 192.168.1.1 の ping 統計: パケット数: 送信 = 2、受信 = 2、損失 = 0 (0% の損失)、 ラウンド トリップの概算時間 (ミリ秒): 最小 = 2ms、最大 = 2ms、平均 = 2ms
ivy2側の eth4 のケーブルを外すと ping で 192.168.1.1 に到達できなくなることから L2TPv3 経由で通信していると考えられる。
また、arp -a で調べると 192.168.1.0/24 のセグメントの状態が見られることを確認した。
設定の保存
EdgeRouter Xでファイルに保存
ここでは、ivy2 の設定をファイルに保存する例を示す。
EdgeMAX OS の CLI を起動してログインし、show configuration の出力をファイルに保存する。
次のコマンドを実行した例を示す。
show configuration > ivy2.configuration.txt
ファイルをPCなどにコピー
scp を利用するなどして、EdgeRouter X 内のファイルをコピーしてPCなどに保存する。
Windowsで次のコマンドを実行した例を示す。
scp ubnt@192.168.22.1:/home/ubnt/ivy2.configuration.txt ivy2.configuration.txt
この例では ユーザ名は、ubntであり、初回の接続なので、 yes と回答してキーを~/.ssh/known_hosts に保存する。
その後、ubnt のパスワードを入力することでコピーが行われる。

コピーして保存した ivy2の設定ファイルの内容を記録しておく。
firewall {
all-ping enable
broadcast-ping disable
ipv6-name WANv6_IN {
default-action drop
description "WAN inbound traffic forwarded to LAN"
enable-default-log
rule 10 {
action accept
description "Allow established/related sessions"
state {
established enable
related enable
}
}
rule 20 {
action drop
description "Drop invalid state"
state {
invalid enable
}
}
}
ipv6-name WANv6_LOCAL {
default-action drop
description "WAN inbound traffic to the router"
enable-default-log
rule 10 {
action accept
description "Allow established/related sessions"
state {
established enable
related enable
}
}
rule 20 {
action drop
description "Drop invalid state"
state {
invalid enable
}
}
rule 30 {
action accept
description "Allow IPv6 icmp"
protocol ipv6-icmp
}
rule 40 {
action accept
description "allow dhcpv6"
destination {
port 546
}
protocol udp
source {
port 547
}
}
}
ipv6-receive-redirects disable
ipv6-src-route disable
ip-src-route disable
log-martians enable
name WAN_IN {
default-action drop
description "WAN to internal"
rule 10 {
action accept
description "Allow established/related"
state {
established enable
related enable
}
}
rule 20 {
action drop
description "Drop invalid state"
state {
invalid enable
}
}
}
name WAN_LOCAL {
default-action drop
description "WAN to router"
rule 10 {
action accept
description "Allow established/related"
state {
established enable
related enable
}
}
rule 20 {
action drop
description "Drop invalid state"
state {
invalid enable
}
}
}
options {
mss-clamp {
interface-type all
mss 1412
}
}
receive-redirects disable
send-redirects enable
source-validation disable
syn-cookies enable
}
interfaces {
bridge br2 {
aging 300
bridged-conntrack disable
hello-time 2
max-age 20
multicast enable
priority 32768
promiscuous enable
stp false
}
ethernet eth0 {
address dhcp
description Internet
duplex auto
firewall {
in {
ipv6-name WANv6_IN
name WAN_IN
}
local {
ipv6-name WANv6_LOCAL
name WAN_LOCAL
}
}
speed auto
}
ethernet eth1 {
description Local
duplex auto
speed auto
}
ethernet eth2 {
description Local
duplex auto
speed auto
}
ethernet eth3 {
description Local
duplex auto
speed auto
}
ethernet eth4 {
bridge-group {
bridge br2
}
description Local
duplex auto
poe {
output off
}
speed auto
}
l2tpv3 l2tpeth2 {
bridge-group {
bridge br2
}
description "L2TPv3 ivy2"
destination-port 11000
encapsulation udp
local-ip 192.168.22.1
peer-session-id 1100
peer-tunnel-id 110
remote-ip 192.168.11.1
session-id 2200
source-port 22000
tunnel-id 220
}
loopback lo {
}
switch switch0 {
address 192.168.22.1/24
description Local
mtu 1500
switch-port {
interface eth1 {
}
interface eth2 {
}
interface eth3 {
}
vlan-aware disable
}
}
}
service {
dhcp-server {
disabled false
hostfile-update disable
shared-network-name LAN {
authoritative enable
subnet 192.168.22.0/24 {
default-router 192.168.22.1
dns-server 192.168.22.1
lease 86400
start 192.168.22.38 {
stop 192.168.22.243
}
}
}
static-arp disable
use-dnsmasq disable
}
dns {
dynamic {
interface eth0 {
service custom-duckdns {
host-name XXXXXXX-ivy2
login nouser
password ****************
protocol dyndns2
server www.duckdns.org
}
}
}
forwarding {
cache-size 150
listen-on switch0
}
}
gui {
http-port 80
https-port 443
older-ciphers enable
}
nat {
rule 5010 {
description "masquerade for WAN"
outbound-interface eth0
type masquerade
}
}
ssh {
port 22
protocol-version v2
}
unms {
disable
}
}
system {
analytics-handler {
send-analytics-report false
}
crash-handler {
send-crash-report false
}
host-name EdgeRouter-X-ivy2
login {
user ubnt {
authentication {
encrypted-password ****************
}
level admin
}
}
ntp {
server 0.ubnt.pool.ntp.org {
}
server 1.ubnt.pool.ntp.org {
}
server 2.ubnt.pool.ntp.org {
}
server 3.ubnt.pool.ntp.org {
}
}
syslog {
global {
facility all {
level notice
}
facility protocols {
level debug
}
}
}
time-zone UTC
}
vpn {
ipsec {
allow-access-to-local-interface disable
auto-firewall-nat-exclude enable
esp-group FOO0 {
compression disable
lifetime 3600
mode tunnel
pfs enable
proposal 1 {
encryption aes128
hash sha1
}
}
ike-group FOO0 {
ikev2-reauth no
key-exchange ikev1
lifetime 28800
proposal 1 {
dh-group 14
encryption aes128
hash sha1
}
}
site-to-site {
peer XXXXXXX-ivy1.duckdns.org {
authentication {
mode pre-shared-secret
pre-shared-secret ****************
}
connection-type initiate
description peer1
ike-group FOO0
ikev2-reauth inherit
local-address any
tunnel 1 {
allow-nat-networks disable
allow-public-networks disable
esp-group FOO0
local {
prefix 192.168.22.0/24
}
remote {
prefix 192.168.11.0/24
}
}
}
}
}
}


































































