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 を送って適切な応答があることを確認する。
1 2 3 4 5 6 7 8 9 10 11 12 |
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 を送って適切な応答があることを確認する。
1 2 3 4 5 6 7 8 9 10 11 12 |
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 から応答を得ることができる。
1 2 3 4 5 6 7 8 9 10 |
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 の出力をファイルに保存する。
次のコマンドを実行した例を示す。
1 |
show configuration > ivy2.configuration.txt |
ファイルをPCなどにコピー
scp を利用するなどして、EdgeRouter X 内のファイルをコピーしてPCなどに保存する。
Windowsで次のコマンドを実行した例を示す。
1 |
scp ubnt@192.168.22.1:/home/ubnt/ivy2.configuration.txt ivy2.configuration.txt |
この例では ユーザ名は、ubntであり、初回の接続なので、 yes と回答してキーを~/.ssh/known_hosts に保存する。
その後、ubnt のパスワードを入力することでコピーが行われる。
コピーして保存した ivy2の設定ファイルの内容を記録しておく。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 |
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 } } } } } } |