遂にやりました。
VPN ファンの誰もが憧れる2拠点のレイヤー2接続による同一 LAN 化を、ソフトイーサを使わずに EdgeRouter だけで達成しました。足掛け3年にも及ぶ試行錯誤の結果、ついに EdgeRouter だけで地デジがリアルタイムで観られるようになりました。いやー、よくやった俺。レイヤー2での拠点間通信なので、 Bonjour = mDNS / DLNA = SDDP 等々もきっちり両拠点間を通して動作しております。
EdgeRouter 6P – 13. 超難しい VPN
ソフトイーサすごい
安全確実にレイヤー2 VPN を実現するなら、最強のレイヤー2対応 VPN 、ソフトイーサを使うのが最も簡単で成功率が高いです。ソフトイーサを動作させられる PC が自宅と実家にあるなら、それでカスケード接続しちゃえばあっけなく動きます。しかし、漢ならルーター一貫で設定したいもの。と思って EdgeRouter だけでの設定に挑戦し、気がついたらほぼ1年経ってました。
ソフトイーサ導入(と Mac mini 2台)で地デジが観られることを確認したものの、そこから EdgeRouter だけで2拠点レイヤー2接続してみてもなかなか思うように Ethernet フレームが行き来しません。ソフトイーサは完全にスイッチングハブをエミュレートしているのに対し、 EdgeRouter のブリッジは細かな挙動がスイッチと違っており、そこをコツコツ調べてようやく動くようになりました。
ちなみにお気付きの通り、この機能の実現にはブリッジが必要です。そうすると EdgeRouter X では少々非力なので・・実は最近出たばかりの EdgeRouter 6P を買ってそれでやってしまいました。なのですでに記事のタイトルもこっそり EdgeRouter X でなくなってます・・。
最近発売になった EdgeRouter 6P は 3,400k pps で $239 と価格性能比がアホほど高いルーターで、大変オススメです。ちなみによく話に出るヤマハの RTX1210 は 381k pps で 125,000 円です。
でもソフトイーサ無しで実現したい
というわけで、設定例を記したいと思います。ただこの記事をわざわざわ読みに来るような人はある程度ルーターに詳しい人でしょうし、あまりにも設定が多岐にわたるので、ともかく設定ファイルを載せてしまおうと思います。パスワードやプライベート IP アドレスはボカしてありますが、流れはつかめるかと思います。
L2TPv3 over IPv6
ちなみに下記の設定は完全に IPv4 ベースですが、 L2TPv3 は IPv6 対応なので、実家と家両方のルーターの WAN 側に IPv6 アドレスを割り当て、かつそのルーターの IPv6 アドレス同士を直接繋げるカタチで L2TPv3 / IPsec トンネルを作ると、遅延のより少ないトンネルができます。IPv6 を使うことによってフレッツの PPPoE を回避できるので RTT が下がるようです。ソフトイーサで IPv6 ベースの VPN を設けるより速くなるようです。 GRE の場合は interfaces > ipv6-tunnel でプロトコルに ip6gre を用いれば IPv4 over IPv6 GRE トンネルができます。どちらのトンネルも IPv6 周りはバグが多いせいか、再起動後に消えたり、パケットを通過させなくなったりします。 L2TPv3 が消えた場合は configure > load > commit で復活します。 ip6gre が通信しなくなった場合は、設定を少し変えて元に戻すと復活します。
設定の概要
| 自宅 | 実家 | |
|---|---|---|
| 機種 | EdgeRouter 6P | EdgeRouter 6P |
| ファームウェア | 1.10.0 | 1.10.0 |
| プロバイダー | Comcast | nifty |
| DDNS | XXX1.duckdns.org | XXX2.duckdns.org |
| WAN 側 ポート | eth0 | pppoe0 |
| WAN 側 MTU | 1500 | 1454 (PPPoE) |
| WAN 側 IP アドレス | ダイナミック / DHCP | ダイナミック / PPPoE |
| LAN 側 ポート | eth2 | eth2 |
| LAN 側 IP アドレス | 10.0.XX1.1 | 10.0.XX2.1 |
| LAN 側 ネットワーク | 10.0.XX1.0/22 | 10.0.XX2.0/22 |
| L2TPv3 用ブリッジ | br0 | br0 |
| ブリッジ用 Ethernet ポート | eth3 | eth3 |
| br0 用 IPv4 Firwall | DHCP を遮断 | DHCP を遮断 |
| br0 用 IPv6 Firewall | IPv6 パケットを遮断 | IPv6 パケットを遮断 |
| GRE 用ループバックアドレス | 192.168.111.1/32 | 192.168.111.2/32 |
| GRE トンネル IP アドレス | 192.168.121.1/30 | 192.168.121.2/30 |
| GRE トンネル MTU | 1366 | 1366 |
| L2TPv3 用ループバックアドレス | 192.168.112.1/32 | 192.168.112.2/32 |
| L2TPv3 トンネル IP アドレス | ブリッジなので無し | ブリッジなので無し |
| L2TPv3 ベースプロトコル | udp | udp |
| L2TPv3 UDP 送信元ポート | [l2tpv3-port-1] | [l2tpv3-port-2] |
| L2TPv3 UDP 宛先ポート | [l2tpv3-port-2] | [l2tpv3-port-1] |
| L2TPv3 トンネル MTU | 1300 | 1300 |
| L2TPv3 トンネル MSS | 1240 | 1240 |
| IPsec トンネル1 (GRE) | 192.168.111.1 – 192.168.111.2 (Site-to-Site) | |
| IPsec トンネル2 (L2TPv3) | 192.168.112.1 – 192.168.112.2 (Site-to-Site) | |
| QoS | Smart Queue | Smart Queue |
| QoS WAN | eth0 | pppoe0 |
| QoS Upload | 10 Mbps | 70 Mbps |
| Offload | オフ | オフ |
| DNS 1 | [comcast-dns-1] | [nifty-dns-1] |
| DNS 2 | [comcast-dns-2] | [nifty-dns-2] |
| バックアップ DNS 1 | [public-dns-1] | [public-dns-1] |
| バックアップ DNS 2 | [public-dns-2] | [public-dns-2] |
この設定では eth0 が WAN 側ポート、 eth2 が通常の LAN 側ポート、そして eth3 が L2 パケットを受け取ってブリッジ br0 経由で L2TPv3 トンネルに流す専用のポートになります。そして eth2 と eth3 や LAN 内の他の端末を同じスイッチングハブにつなぎます。もちろん EdgeRouter 6P は内蔵スイッチハードウェアがないので別途スッチングハブを使うのは必須なんですが、 EdgeRouter X で switch0 を LAN 側ポートとして使用している場合でも eth3 に相当するポートを switch0 から除外し、改めて LAN ケーブルで eth3 と switch0 を短絡する、もしくは eth3 と switch0 を他のスイッチングハブにつなぐ必要があると思います。
L2TPv3 の MTU は計算してみたところ 1336 以下となりました。ただここではより保守的に 1300 に、そして MSS はさらに保守的に 1240 に設定しています。
自宅側 ( Comcast )
firewall {
all-ping enable
broadcast-ping disable
group {
address-group google-clients {
address 10.0.XX1.XX
}
address-group hulu-ipset {
description hulu.jp
}
address-group psstore-ipset {
description store.playstation.com
}
address-group radiko-ipset {
}
address-group tver-ipset {
description tver.jp
}
}
ipv6-name L2v6 {
default-action drop
}
ipv6-name WANv6_IN {
default-action drop
description "WAN to internal"
rule 10 {
action accept
description "Allow established/related"
state {
established enable
related enable
}
}
rule 20 {
action accept
description "Allow ICMPv6"
protocol ipv6-icmp
}
rule 30 {
action drop
description "Drop invalid state"
state {
invalid enable
}
}
}
ipv6-name WANv6_LOCAL {
default-action drop
description "WAN to router"
rule 10 {
action accept
description "Allow established/related"
state {
established enable
related enable
}
}
rule 50 {
action accept
description "Allow DHCPv6"
destination {
port 546
}
protocol udp
source {
port 547
}
}
rule 70 {
action accept
description "Allow IPv6 ICMP"
protocol ipv6-icmp
}
rule 500 {
action drop
description "Drop invalid state"
state {
invalid enable
}
}
}
ipv6-receive-redirects disable
ipv6-src-route disable
ip-src-route disable
log-martians enable
modify route_tunnel {
rule 10 {
action modify
description radiko.jp
destination {
group {
address-group radiko-ipset
}
}
modify {
table 1
}
}
rule 110 {
action modify
modify {
table 1
}
source {
group {
address-group google-clients
}
}
}
rule 520 {
action modify
description tver-ipset
destination {
group {
address-group tver-ipset
}
}
modify {
table 1
}
}
rule 530 {
action modify
description psstore-ipset
destination {
group {
address-group psstore-ipset
}
}
modify {
table 1
}
}
rule 550 {
action modify
description hulu-ipset
destination {
group {
address-group hulu-ipset
}
}
modify {
table 1
}
}
}
name L2 {
default-action accept
description L2_filter
rule 1 {
action drop
description "Drop DHCP"
destination {
port 67-68
}
log disable
protocol udp
}
}
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 accept
description "Allow GRE"
log disable
protocol gre
}
rule 30 {
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 30 {
action accept
description "Allow L2TP"
destination {
port 500,1701,4500,[l2tpv3-port-1],[l2tpv3-port-2]
}
log disable
protocol tcp_udp
}
rule 40 {
action accept
description "Allow ESP"
log disable
protocol esp
}
rule 50 {
action accept
description "Allow GRE"
log disable
protocol gre
}
rule 60 {
action accept
description "Allow ICMP"
log disable
protocol igmp
}
rule 70 {
action drop
description "Drop invalid state"
state {
invalid enable
}
}
}
options {
mss-clamp {
interface-type all
mss 1240
}
}
receive-redirects disable
send-redirects enable
source-validation disable
syn-cookies enable
}
interfaces {
bridge br0 {
aging 300
bridged-conntrack disable
description Bridge
firewall {
in {
ipv6-name L2v6
name L2
}
}
hello-time 2
max-age 20
multicast enable
priority 32768
promiscuous enable
stp false
}
ethernet eth0 {
address dhcp
description Internet
dhcp-options {
default-route update
default-route-distance 210
name-server no-update
}
dhcpv6-pd {
pd 0 {
interface eth1 {
host-address ::1
prefix-id :1
service slaac
}
prefix-length /60
}
rapid-commit enable
}
duplex auto
firewall {
in {
ipv6-name WANv6_IN
name WAN_IN
}
local {
ipv6-name WANv6_LOCAL
name WAN_LOCAL
}
}
poe {
output off
}
speed auto
}
ethernet eth1 {
address 10.1.X1.1/24
description Local
duplex auto
poe {
output off
}
speed auto
}
ethernet eth2 {
address 10.0.XX1.1/22
description Local
duplex auto
firewall {
in {
modify route_tunnel
}
}
poe {
output 24v
}
speed auto
}
ethernet eth3 {
bridge-group {
bridge br0
}
description Local
duplex auto
ip {
enable-proxy-arp
}
poe {
output off
}
speed auto
}
ethernet eth4 {
description Local
duplex auto
poe {
output off
}
speed auto
}
l2tpv3 l2tpeth0 {
bridge-group {
bridge br0
}
description "L2 Tunnel"
destination-port [l2tpv3-port-2]
encapsulation udp
local-ip 192.168.112.1
mtu 1300
peer-session-id 200
peer-tunnel-id 200
remote-ip 192.168.112.2
session-id 100
source-port [l2tpv3-port-1]
tunnel-id 100
}
loopback lo {
address 192.168.111.1/32
address 192.168.112.1/32
}
tunnel tun0 {
address 192.168.121.1/30
description "L3 Tunnel"
encapsulation gre
local-ip 192.168.111.1
mtu 1366
multicast enable
remote-ip 192.168.111.2
ttl 255
}
}
port-forward {
auto-firewall enable
hairpin-nat enable
lan-interface eth1
lan-interface eth2
rule 4 {
description UNMS
forward-to {
address 10.0.XX1.XX
port XXXXX
}
original-port XXXXX
protocol tcp_udp
}
rule 5 {
description UniFi
forward-to {
address 10.0.XX1.XX
port XXXX
}
original-port XXXX
protocol tcp_udp
}
rule 7 {
description SoftEther
forward-to {
address 10.1.X1.101
port XXXX
}
original-port XXXX
protocol tcp_udp
}
wan-interface eth0
}
protocols {
static {
interface-route 10.1.X2.0/24 {
next-hop-interface tun0 {
}
}
table 1 {
interface-route 0.0.0.0/0 {
next-hop-interface tun0 {
}
}
}
}
}
service {
dhcp-server {
disabled false
hostfile-update disable
shared-network-name Config {
authoritative disable
subnet 10.1.X1.0/24 {
default-router 10.1.X1.1
dns-server 10.1.X1.1
lease 86400
start 10.1.X1.11 {
stop 10.1.X1.30
}
static-mapping Mac-mini-LAN {
ip-address 10.1.X1.101
mac-address XX:XX:XX:XX:XX:XX
}
}
}
shared-network-name LAN {
authoritative enable
subnet 10.0.XX1.0/22 {
default-router 10.0.XX1.1
dns-server 10.0.XX1.1
lease 86400
start 10.0.XX1.11 {
stop 10.0.XX1.30
}
static-mapping Mac {
ip-address 10.0.XX1.XX
mac-address XX:XX:XX:XX:XX:XX
}
}
}
static-arp disable
use-dnsmasq disable
}
dns {
dynamic {
interface eth0 {
service custom-duckdns {
host-name XXX1
login nouser
password XXXXXXXX
protocol dyndns2
server www.duckdns.org
}
}
}
forwarding {
cache-size 500
except-interface eth0
name-server [comcast-dns-1]
name-server [comcast-dns-2]
name-server [public-dns-1]
name-server [public-dns-2]
options strict-order
options ipset=/tver.jp/ntv.co.jp/tv-asahi.co.jp/tbs.co.jp/fujitv.co.jp/presentcast.co.jp/brightcove.com/brightcove.net/streamhub.tv/streamhub.io/stream.ne.jp/durasite.net/ad-v.jp/interactive-circle.jp/ntvmov-elb-1535922568.ap-northeast-1.elb.amazonaws.com/tver-api-data.s3.amazonaws.com/s3-ap-northeast-1-w.amazonaws.com/e7164.g.akamaiedge.net/tver-ipset
options server=/tver.jp/ntv.co.jp/tv-asahi.co.jp/tbs.co.jp/fujitv.co.jp/presentcast.co.jp/brightcove.com/brightcove.net/streamhub.tv/streamhub.io/stream.ne.jp/durasite.net/ad-v.jp/interactive-circle.jp/ntvmov-elb-1535922568.ap-northeast-1.elb.amazonaws.com/tver-api-data.s3.amazonaws.com/s3-ap-northeast-1-w.amazonaws.com/e7164.g.akamaiedge.net/[nifty-dns-1]
options ipset=/playstation.com/playstation.com.edgekey.net/playstation.net.edgekey.net/playstation.net/playstation.net.edgesuite.net/d1bzh9wdftmzm0.cloudfront.net/sonycoment-1.hs.llnwd.net/us-p1-np-sn-623478034.us-west-1.elb.amazonaws.com/us-p1-np-event-844572407.us-west-1.elb.amazonaws.com/us-p1-np-commerce-1073095297.us-west-1.elb.amazonaws.com/us-p1-np-regcam-2129210197.us-west-1.elb.amazonaws.com/sonynetworkentertainment.112.2o7.net/psstore-ipset
options server=/playstation.com/playstation.com.edgekey.net/playstation.net.edgekey.net/playstation.net/playstation.net.edgesuite.net/d1bzh9wdftmzm0.cloudfront.net/sonycoment-1.hs.llnwd.net/us-p1-np-sn-623478034.us-west-1.elb.amazonaws.com/us-p1-np-event-844572407.us-west-1.elb.amazonaws.com/us-p1-np-commerce-1073095297.us-west-1.elb.amazonaws.com/us-p1-np-regcam-2129210197.us-west-1.elb.amazonaws.com/sonynetworkentertainment.112.2o7.net/[nifty-dns-1]
options ipset=/hulu.jp/happyon.jp/happyon.jp.edgekey.net/huluim.com/hulu.com.akadns.net/hulu.com.edgekey.net/a268.b.akamai.net/e8297.e12.akamaiedge.net/e7963.b.akamaiedge.net/e9436.b.akamaiedge.net/hulu-ipset
options server=/hulu.jp/happyon.jp/happyon.jp.edgekey.net/huluim.com/hulu.com.akadns.net/hulu.com.edgekey.net/a268.b.akamai.net/e8297.e12.akamaiedge.net/e7963.b.akamaiedge.net/e9436.b.akamaiedge.net/[nifty-dns-1]
options ipset=/radiko.jp/f-radiko.smartstream.ne.jp/appsflyer.com/e4805.a.akamaiedge.net/appsflyer-web-1810875176.eu-west-1.elb.amazonaws.com/appsflyer-web-2-1926050047.eu-west-1.elb.amazonaws.com/sessionstat-999713689.eu-west-1.elb.amazonaws.com/radiko-ipset
options server=/radiko.jp/f-radiko.smartstream.ne.jp/appsflyer.com/e4805.a.akamaiedge.net/appsflyer-web-1810875176.eu-west-1.elb.amazonaws.com/appsflyer-web-2-1926050047.eu-west-1.elb.amazonaws.com/sessionstat-999713689.eu-west-1.elb.amazonaws.com/[nifty-dns-1]
}
}
gui {
http-port 80
https-port 443
older-ciphers enable
}
nat {
rule 5010 {
description masquerade-for-WAN
outbound-interface eth0
type masquerade
}
rule 5011 {
description masquerade-for-tun0
destination {
address !224.0.0.0-239.255.255.255
group {
}
}
log disable
outbound-interface tun0
protocol tcp_udp
source {
address 10.0.XX1.0/24
}
type masquerade
}
}
ssh {
allow-root
port 22
protocol-version v2
}
unms {
connection wss://10.0.XX1.XX:XXXXX
}
upnp2 {
acl {
rule 10 {
action deny
description Block-port-4500
external-port 4500
local-port 4500
subnet 10.0.XX1.0/22
}
}
listen-on eth1
listen-on eth2
nat-pmp enable
secure-mode enable
wan eth0
}
}
system {
host-name router1
login {
user XXXXX {
authentication {
encrypted-password XXXXXXXX
}
level admin
}
}
name-server 127.0.0.1
ntp {
server 1.ubnt.pool.ntp.org {
}
}
options {
reboot-on-panic true
}
syslog {
global {
facility all {
level notice
}
facility protocols {
level debug
}
}
}
time-zone America/Los_Angeles
traffic-analysis {
dpi enable
export enable
}
}
traffic-control {
smart-queue QoS {
download {
ecn enable
flows 1024
fq-quantum 1514
limit 10240
rate 250mbit
}
upload {
ecn enable
flows 1024
fq-quantum 1514
limit 10240
rate 10mbit
}
wan-interface eth0
}
}
vpn {
ipsec {
auto-update 3600
auto-firewall-nat-exclude enable
esp-group ESP-1 {
compression disable
lifetime 1800
mode tunnel
pfs enable
proposal 1 {
encryption aes256
hash sha1
}
proposal 2 {
encryption 3des
hash md5
}
}
ike-group IKE-1 {
ikev2-reauth no
key-exchange ikev2
lifetime 3600
proposal 1 {
dh-group 2
encryption aes256
hash sha1
}
proposal 2 {
dh-group 2
encryption aes128
hash sha1
}
}
ipsec-interfaces {
interface eth0
}
nat-networks {
allowed-network 0.0.0.0/0 {
exclude 10.0.XX1.0/22
}
}
nat-traversal enable
site-to-site {
peer XXX2.duckdns.org {
authentication {
id XXX1.duckdns.org
mode pre-shared-secret
pre-shared-secret XXXXXXXX
remote-id XXX2.duckdns.org
}
connection-type initiate
default-esp-group ESP-1
dhcp-interface eth0
ike-group IKE-1
ikev2-reauth inherit
tunnel 1 {
allow-nat-networks disable
allow-public-networks disable
local {
prefix 192.168.111.1/32
}
remote {
prefix 192.168.111.2/32
}
}
tunnel 2 {
allow-nat-networks disable
allow-public-networks disable
local {
prefix 192.168.112.1/32
}
remote {
prefix 192.168.112.2/32
}
}
}
}
}
l2tp {
remote-access {
authentication {
local-users {
username XXXXX {
password XXXXXXXX
}
mode local
}
client-ip-pool {
start 10.0.XX1.141
stop 10.0.XX1.150
}
dhcp-interface eth0
dns-servers {
server-1 10.0.XX1.1
server-2 [comcast-dns-1]
}
idle 1800
ipsec-settings {
authentication {
mode pre-shared-secret
pre-shared-secret XXXXXXXX
}
ike-lifetime 3600
lifetime 3600
}
mtu 1280
}
}
}
実家側 ( フレッツのコラボ光 )
firewall {
all-ping enable
broadcast-ping disable
ipv6-name L2v6 {
default-action drop
}
ipv6-name WANv6_IN {
default-action drop
description "WAN to internal"
rule 10 {
action accept
description "Allow established/related"
state {
established enable
related enable
}
}
rule 20 {
action accept
description "Allow IPv6 ICMP"
protocol ipv6-icmp
}
rule 30 {
action drop
description "Drop invalid state"
state {
invalid enable
}
}
}
ipv6-name WANv6_LOCAL {
default-action drop
description "WAN to router"
rule 10 {
action accept
description "Allow established/related"
state {
established enable
related enable
}
}
rule 50 {
action accept
description "Allow DHCPv6"
destination {
port 546
}
protocol udp
source {
port 547
}
}
rule 70 {
action accept
description "Allow IPv6 ICMP"
protocol ipv6-icmp
}
rule 500 {
action drop
description "Drop invalid state"
state {
invalid enable
}
}
}
ipv6-receive-redirects disable
ipv6-src-route disable
ip-src-route disable
log-martians enable
name L2 {
default-action accept
description L2_filter
rule 1 {
action drop
description "Drop DHCP"
log disable
protocol udp
source {
port 67-68
}
}
}
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 accept
description "Allow GRE"
log disable
protocol gre
}
rule 30 {
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 30 {
action accept
description "Allow L2TP"
destination {
port 500,1701,4500,[l2tpv3-port-1],[l2tpv3-port-2]
}
log disable
protocol tcp_udp
}
rule 40 {
action accept
description "Allow ESP"
log disable
protocol esp
}
rule 50 {
action accept
description "Allow GRE"
log disable
protocol gre
}
rule 60 {
action accept
description "Allow ICMP"
log disable
protocol icmp
}
rule 70 {
action drop
description "Drop invalid state"
state {
invalid enable
}
}
}
options {
mss-clamp {
interface-type all
mss 1240
}
}
receive-redirects disable
send-redirects enable
source-validation disable
syn-cookies enable
}
interfaces {
bridge br0 {
aging 300
bridged-conntrack disable
description Bridge
firewall {
in {
ipv6-name L2v6
name L2
}
}
hello-time 2
max-age 20
multicast enable
priority 32768
promiscuous enable
stp false
}
ethernet eth0 {
description Internet
dhcp-options {
default-route update
default-route-distance 210
name-server no-update
}
duplex auto
firewall {
in {
ipv6-name WANv6_IN
}
local {
ipv6-name WANv6_LOCAL
}
}
ipv6 {
address {
autoconf
}
dup-addr-detect-transmits 1
}
poe {
output off
}
pppoe 0 {
default-route auto
description ISP
firewall {
in {
name WAN_IN
}
local {
name WAN_LOCAL
}
}
mtu 1454
name-server none
password XXXXXXXXX
user-id XXXXX
}
speed auto
}
ethernet eth1 {
address 10.1.X2.1/24
description Local
duplex auto
poe {
output off
}
speed auto
}
ethernet eth2 {
address 10.0.XX2.1/22
description Local
duplex auto
poe {
output off
}
speed auto
}
ethernet eth3 {
bridge-group {
bridge br0
}
description Local
duplex auto
ip {
enable-proxy-arp
}
poe {
output off
}
speed auto
}
ethernet eth4 {
description Local
duplex auto
poe {
output off
}
speed auto
}
l2tpv3 l2tpeth0 {
bridge-group {
bridge br0
}
description "L2 Tunnel"
destination-port [l2tpv3-port-1]
encapsulation udp
local-ip 192.168.112.2
mtu 1300
peer-session-id 100
peer-tunnel-id 100
remote-ip 192.168.112.1
session-id 200
source-port [l2tpv3-port-2]
tunnel-id 200
}
loopback lo {
address 192.168.111.2/32
address 192.168.112.2/32
}
tunnel tun0 {
address 192.168.121.2/30
description "L3 Tunnel"
encapsulation gre
local-ip 192.168.111.2
mtu 1366
multicast enable
remote-ip 192.168.111.1
ttl 255
}
}
port-forward {
auto-firewall enable
hairpin-nat enable
lan-interface eth1
lan-interface eth2
rule 4 {
description SoftEther
forward-to {
address 10.0.XX2.104
port XXXX
}
original-port XXXX
protocol tcp_udp
}
wan-interface pppoe0
}
protocols {
static {
interface-route 10.1.X1.0/24 {
next-hop-interface tun0 {
}
}
}
}
service {
dhcp-server {
disabled false
hostfile-update disable
shared-network-name Config {
authoritative disable
subnet 10.1.X2.0/24 {
default-router 10.1.X2.1
dns-server 10.1.X2.1
lease 86400
start 10.1.X2.11 {
stop 10.1.X2.30
}
}
}
shared-network-name LAN {
authoritative disable
subnet 10.0.XX2.0/22 {
default-router 10.0.XX2.1
dns-server 10.0.XX2.1
lease 86400
start 10.0.XX2.11 {
stop 10.0.XX2.30
}
static-mapping Mac-mini-LAN {
ip-address 10.0.XX2.104
mac-address XX:XX:XX:XX:XX:XX
}
}
}
static-arp disable
use-dnsmasq disable
}
dns {
dynamic {
interface pppoe0 {
service custom-duckdns {
host-name XXX2
login nouser
password XXXXXXXX
protocol dyndns2
server www.duckdns.org
}
}
}
forwarding {
cache-size 500
except-interface eth0
name-server [nifty-dns-1]
name-server [nifty-dns-2]
name-server [public-dns-1]
name-server [public-dns-2]
options strict-order
}
}
gui {
http-port 80
https-port 443
older-ciphers enable
}
nat {
rule 5002 {
description masquerade-for-WAN
log disable
outbound-interface pppoe0
protocol all
source {
}
type masquerade
}
rule 5003 {
description masquerade-for-tun0
destination {
address !224.0.0.0-239.255.255.255
}
log disable
outbound-interface tun0
protocol tcp_udp
source {
address 10.0.XX2.0/24
}
type masquerade
}
}
ssh {
allow-root
port 22
protocol-version v2
}
unms {
connection wss://XXX1.duckdns.org:XXXXX
}
upnp2 {
acl {
rule 10 {
action deny
description "Block port 4500"
external-port 4500
local-port 4500
subnet 10.0.XX2.0/22
}
}
listen-on eth1
listen-on eth2
nat-pmp enable
secure-mode enable
wan pppoe0
}
}
system {
host-name ER6-Y01
login {
user XXXXX {
authentication {
encrypted-password XXXXXXXX
}
level admin
}
}
name-server 127.0.0.1
ntp {
server 1.ubnt.pool.ntp.org {
}
}
options {
reboot-on-panic true
}
syslog {
global {
facility all {
level notice
}
facility protocols {
level debug
}
}
}
time-zone Asia/Tokyo
traffic-analysis {
dpi enable
export enable
}
}
traffic-control {
smart-queue QoS {
download {
ecn enable
flows 1024
fq-quantum 1514
limit 10240
rate 70mbit
}
upload {
ecn enable
flows 1024
fq-quantum 1514
limit 10240
rate 70mbit
}
wan-interface pppoe0
}
}
vpn {
ipsec {
auto-update 3600
auto-firewall-nat-exclude enable
esp-group ESP-1 {
compression disable
lifetime 1800
mode tunnel
pfs enable
proposal 1 {
encryption aes256
hash sha1
}
proposal 2 {
encryption 3des
hash md5
}
}
ike-group IKE-1 {
ikev2-reauth no
key-exchange ikev2
lifetime 3600
proposal 1 {
dh-group 2
encryption aes256
hash sha1
}
proposal 2 {
dh-group 2
encryption aes128
hash sha1
}
}
ipsec-interfaces {
interface eth0
}
nat-networks {
allowed-network 0.0.0.0/0 {
exclude 10.0.XX2.0/22
}
}
nat-traversal enable
site-to-site {
peer XXX1.duckdns.org {
authentication {
id XXX2.duckdns.org
mode pre-shared-secret
pre-shared-secret XXXXXXXX
remote-id XXX1.duckdns.org
}
connection-type initiate
default-esp-group ESP-1
ike-group IKE-1
ikev2-reauth inherit
local-address 0.0.0.0
tunnel 1 {
allow-nat-networks disable
allow-public-networks disable
local {
prefix 192.168.111.2/32
}
remote {
prefix 192.168.111.1/32
}
}
tunnel 2 {
allow-nat-networks disable
allow-public-networks disable
local {
prefix 192.168.112.2/32
}
remote {
prefix 192.168.112.1/32
}
}
}
}
}
l2tp {
remote-access {
authentication {
local-users {
username XXXXX {
password XXXXXXXX
}
}
mode local
}
client-ip-pool {
start 10.0.XX2.141
stop 10.0.XX2.150
}
dns-servers {
server-1 10.0.XX2.1
server-2 [nifty-dns-1]
}
idle 1800
ipsec-settings {
authentication {
mode pre-shared-secret
pre-shared-secret apple888
}
ike-lifetime 3600
lifetime 3600
}
mtu 1280
outside-address 0.0.0.0
}
}
}
さらに両方の拠点のブリッジ ( br0 ) で IGMP Snooping を無効にします。
# SSH で EdgeRouter にログインして下記コマンドを入力 sudo echo 0 > /sys/devices/virtual/net/br0/bridge/multicast_snooping
さらに再起動後にもこのコマンドが実行されるよう、下記の内容のスクリプトを /config/scripts/post-config.d/ フォルダー内に適当なファイル名で保存します。
#!/bin/bash sudo echo 0 > /sys/devices/virtual/net/br0/bridge/multicast_snooping
これで2拠点が常時レイヤー2接続されることになります。・・しかし手間もかかるしミスを犯す可能性もかなり高いので・・やはりおすすめはソフトイーサかなと思います。
yabe.jp » Gadgets »



いつもルータの設定大変参考になります。おかげさまでGREによる拠点間VPNまでは設定することができました。
最後のステップとしてL2TPv3でのLayer 2ブリッジを掲載いただいた設定を参考に行なっているのですが、一点わからないことがあり、質問させてください。
設定ファイルにはswitch0がないようなのですが、eth2 (LAN) と eth3 (ブリッジ)はどのように接続する設計でしょうか。eth2とeth3は外部のスイッチングハブで接続する構成になりますでしょうか。
お手数ですが教えていだけますと幸いです。
返信ならびに追記ありがとうございます。
EdgeRouter 6PはSwitchチップを搭載していないので外部のスイッチングハブが必須になるのですね。EdgeRouter Xでしか試していなかったのでそこがわからなかったのですが、謎が解けました。ありがとうございます。
追記いただいたeth3とswitch0に割り当てているポートを短絡させる方法でまずは試してみたいと思います。
WANのIPv6化までされたんですね!Yabeさんの高速化への情熱には脱帽です。今後も改善情報楽しみにしています :)
ええ、その通りです。普通のスイッチングハブに LAN 内の他の機器や、 eth2 と eth3 が繋がっています。 eth2 はもともとの LAN 用端子で、 eth3 は IP アドレス割当なしで、 L2 パケットをブリッジ経由で L2TPv3 に流す役割をしてます。文章にも追記しました!
ちなみに現在はフレッツの PPPoE での速度低下をさけるため、各拠点の WAN (eth0) に IPv6 アドレスを割り当てて、その IPv6 アドレス間に L2TPv3 トンネルと GRE (ip6gre) トンネルを並列に設ける IPv4 over IPv6 的なトンネルにしてます。 IPsec もオーバーヘッドを減らすため、 eth0 の IPv6 アドレス間での transport モードにしました。 IPv6 は半固定ということで、アドレスがダイナミックに変わらない前提の設定です。ただ IPv6 周りはバグが多いせいか、 L2TPv3 も ip6gre も再起動すると落ちるのが悩みです・・(笑)。