「VyOS と Tailscale で高速・冗長化された VPN を作る方法」の版間の差分

提供:hkatou_Lab
ナビゲーションに移動 検索に移動
編集の要約なし
2行目: 2行目:
IPsec VPN を超える速度で、拠点間通信を暗号化できる
IPsec VPN を超える速度で、拠点間通信を暗号化できる


* Tailscale : フレッツ IPoE <-> Nuro で 125Mbps を確認
* Tailscale : フレッツ IPoE <-> Nuro で 125Mbps を確認
* IPsec : フレッツ PPPoE <-> Nuro では 50Mbps 程度
* IPsec : フレッツ PPPoE <-> Nuro では 50Mbps 程度


42行目: 42行目:
** 例) Tailscale の 1 アカウント内で同一サブネットを 2 つのノードで advertise-routes したとき、片方のノードで集約ルートが広報できず、通信不可になる
** 例) Tailscale の 1 アカウント内で同一サブネットを 2 つのノードで advertise-routes したとき、片方のノードで集約ルートが広報できず、通信不可になる
** Lo を BGP ピアに使用することで、集約ルートの通信不可を検出し、切り替えることが可能
** Lo を BGP ピアに使用することで、集約ルートの通信不可を検出し、切り替えることが可能
* BGP ピアの宛先 Lo 宛 Static Route を interface tailscale0 に向ける + ebgp-multihop 2 を設定
* BGP ピアの宛先 Lo 宛 Static Route を interface Tailscale 0 に向ける + ebgp-multihop 2 を設定
** eBGP のデフォルトは Keepalive の IP ヘッダが TTL=1 のため、/30 サブネットを経由した時点で TTL=0 で Drop してしまい、Lo とピアできない
** eBGP のデフォルトは Keepalive の IP ヘッダが TTL=1 のため、/30 サブネットを経由した時点で TTL=0 で Drop してしまい、Lo とピアできない
** multihop の数を多くする場合は、IGP / iBGP の迂回経路経由で切り替わる
** multihop の数を多くする場合は、IGP / iBGP の迂回経路経由で切り替わる
54行目: 54行目:
* 冗長化なし : 1 つ
* 冗長化なし : 1 つ
* 冗長化あり : 2 つ
* 冗長化あり : 2 つ
** アカウントが 1 つ + Free プランの場合、tailscale subnet router は同じプレフィックスを 1 台しか広報できない
** アカウントが 1 つ + Free プランの場合、Tailscale subnet router は同じプレフィックスを 1 台しか広報できない


VyOS をハイパーバイザにインストール
VyOS をハイパーバイザにインストール
71行目: 71行目:
T3641 (feature): Upgrade base system from Debian Buster -> Debian Bullseye</ref> [https://tailscale.com/download/linux/debian-bullseye Debian 11 Bullseye の手順]を使用する
T3641 (feature): Upgrade base system from Debian Buster -> Debian Bullseye</ref> [https://tailscale.com/download/linux/debian-bullseye Debian 11 Bullseye の手順]を使用する
* VyOS の CLI から、直接 bash shell のコマンドを投入可能
* VyOS の CLI から、直接 bash shell のコマンドを投入可能
* これはインストール直後に行ったほうが良い
* これは VyOS のインストール直後に行ったほうが良い
** VyOS 設定後に tailscale をインストールすると、VyOS が正常に動作しなくなる場合があった
** VyOS 設定後に Tailscale をインストールすると、VyOS が正常に動作しなくなる場合があった


VyOS を再起動
VyOS を再起動
78行目: 78行目:
VyOS で WAN 側ルーティングを設定する
VyOS で WAN 側ルーティングを設定する


* PPPoE や DHCP などでインターネットに接続し、tailscale を動作可能にする
* PPPoE や DHCP などでインターネットに接続し、Tailscale を動作可能にする


VyOS で tailscale を起動する
VyOS で Tailscale を起動する


VyOS で WAN 側 VPN にルーティングを設定する
VyOS で WAN 側 VPN にルーティングを設定する
91行目: 91行目:
* LAN 側に L3 スイッチがある場合 : OSPF / BGP で冗長化する
* LAN 側に L3 スイッチがある場合 : OSPF / BGP で冗長化する


== VyOS に Tailscale をインストールする ==
=== VyOS をインターネットに接続する ===
<syntaxhighlight lang="diff">
vyos@West01# set interfaces ethernet eth3 address 'dhcp'
vyos@West01# set protocols static route 0.0.0.0/0 next-hop x.x.x.x
vyos@West01# set system name-server '8.8.8.8'
</syntaxhighlight>
x.x.x.x にはインターネットへ抜けられる IP を指定する
=== VyOS に Tailscale をインストールする ===
Tailscale の GPG キーとリポジトリを登録<syntaxhighlight lang="diff">
vyos@West01# curl -fsSL https://pkgs.tailscale.com/stable/debian/bullseye.noarmor.gpg | sudo tee /usr/share/keyrings/tailscale-archive-keyring.gpg >/dev/null
vyos@West01# curl -fsSL https://pkgs.tailscale.com/stable/debian/bullseye.tailscale-keyring.list | sudo tee /etc/apt/sources.list.d/tailscale.list
</syntaxhighlight>
=== Tailscale をインストール ===
<syntaxhighlight lang="diff">
vyos@West01# sudo apt-get update
Get:1 https://pkgs.tailscale.com/stable/debian bullseye InRelease
Get:2 https://pkgs.tailscale.com/stable/debian bullseye/main amd64 Packages [5,389 B]
Fetched 10.9 kB in 1s (11.5 kB/s)
Reading package lists... Done
[edit]
</syntaxhighlight><syntaxhighlight lang="diff">
vyos@West01# sudo apt-get install tailscale
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following NEW packages will be installed:
  tailscale
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 19.2 MB of archives.
After this operation, 35.6 MB of additional disk space will be used.
Get:1 https://pkgs.tailscale.com/stable/debian bullseye/main amd64 tailscale amd64 1.24.0 [19.2 MB]
Fetched 19.2 MB in 3s (6,108 kB/s)
Selecting previously unselected package tailscale.
(Reading database ... 67158 files and directories currently installed.)
Preparing to unpack .../tailscale_1.24.0_amd64.deb ...
Unpacking tailscale (1.24.0) ...
Setting up tailscale (1.24.0) ...
Created symlink /etc/systemd/system/multi-user.target.wants/tailscaled.service → /lib/systemd/system/tailscaled.service.
localepurge: Disk space freed:      0 KiB in /usr/share/locale
localepurge: Disk space freed:      0 KiB in /usr/share/man
localepurge: Disk space freed:      0 KiB in /usr/share/aptitude
Total disk space freed by localepurge: 0 KiB
[edit]
vyos@West01#
</syntaxhighlight>
==== Tailscale アカウントに機器を紐づける ====
<syntaxhighlight lang="diff">
vyos@West01# sudo tailscale up --advertise-routes 172.16.0.0/16 --accept-routes=true
To authenticate, visit:
        https://login.tailscale.com/x/accdef
Success.
</syntaxhighlight>
West01 なので、広報するルートに 172.16.0.0/16 を指定し、別機器から広報されたルートを受け入れるオプションを指定する
出てきた URL をブラウザに貼り付けて、ログインすれば OK
=== Tailscale にログインして、広報するルートを確定 ===
= 各プロトコルの設定 =
=== BGP ===




99行目: 170行目:


== Tailscale の TIPS ==
== Tailscale の TIPS ==
tailscale の subnet router は、有効化時に VyOS の動作に影響がある
Tailscale の subnet router は、有効化時に VyOS の動作に影響がある


* 2 台のルータで同じプレフィックスを advetise-routes すると、片方は通信できない
* 2 台のルータで同じプレフィックスを advetise-routes すると、片方は通信できない
107行目: 178行目:


== リファレンス ==
== リファレンス ==
[https://internet.watch.impress.co.jp/docs/column/shimizu/1303751.html 100台まで無料のVPNサービス「tailscale」、リンクだけでマシンのシェアも可能!?]
[https://internet.watch.impress.co.jp/docs/column/shimizu/1303751.html 100台まで無料のVPNサービス「Tailscale 」、リンクだけでマシンのシェアも可能!?]


== 引用 ==
== 引用 ==

2022年4月26日 (火) 14:18時点における版

目的・メリット

IPsec VPN を超える速度で、拠点間通信を暗号化できる

  • Tailscale  : フレッツ IPoE <-> Nuro で 125Mbps を確認
  • IPsec : フレッツ PPPoE <-> Nuro では 50Mbps 程度

ダイナミック ルーティングで、拠点間通信を冗長化できる

固定・動的グローバル IP が必要ない

  • IPsec は、少なくとも片方にグローバル IP が必要
  • Tailscale は両拠点とも NAT 配下で OK

リモートアクセス VPN も同時に構築可能

必要なもの

x86 サーバ x2

タグ Vlan 対応 L2 スイッチ

あると良いもの

x86 サーバ x4

  • 2 拠点に 2 台ずつ設置して、物理的にも冗長化させる

タグ Vlan 対応 L3 スイッチ

論理構成例

West01,02 , East01,02 : VyOS 1.4

West_vSwitch , East_vSwitch : ESXi vSwitch

West_PC01 , East_PC01 : LAN ホスト

ポイント

BGP は Tailscale の 100.64.x.x/32 でピアを張らず、広報する集約ルートから切り出したサブネットを使用し、Loopback (以下 Lo) インターフェースで BGP セッションを張る

  • 100.64.x.x/32 で張ると、広報する内部ネットワークが通信できない場合にも BGP ピアを張り続けてしまう
    • 例) Tailscale の 1 アカウント内で同一サブネットを 2 つのノードで advertise-routes したとき、片方のノードで集約ルートが広報できず、通信不可になる
    • Lo を BGP ピアに使用することで、集約ルートの通信不可を検出し、切り替えることが可能
  • BGP ピアの宛先 Lo 宛 Static Route を interface Tailscale 0 に向ける + ebgp-multihop 2 を設定
    • eBGP のデフォルトは Keepalive の IP ヘッダが TTL=1 のため、/30 サブネットを経由した時点で TTL=0 で Drop してしまい、Lo とピアできない
    • multihop の数を多くする場合は、IGP / iBGP の迂回経路経由で切り替わる

Tailscale 上で Lo のルート交換に OSPF を試してみたが、動作しなかった

  • Tailscale でマルチキャスト or OSPF IP protocol number がフィルタリングされている

構築手順

Tailscale のアカウントを作成する

  • 冗長化なし : 1 つ
  • 冗長化あり : 2 つ
    • アカウントが 1 つ + Free プランの場合、Tailscale subnet router は同じプレフィックスを 1 台しか広報できない

VyOS をハイパーバイザにインストール

  • WAN 側ポートグループに DHCP や PPPoE などの Vlan を割り当て、eth4 にアサイン
  • LAN 側ポートグループにホストや L3SW の Vlan を割り当て、eth0 にアサイン
  • VyOS の CD-ROM をマウントして起動、install image で VM の HDD へインストール

VyOS をインターネットに接続する設定を行う

VyOS に Tailscale をインストールする

  • VyOS 1.4 の場合、ベースとなる Linux[1] Debian 11 Bullseye の手順を使用する
  • VyOS の CLI から、直接 bash shell のコマンドを投入可能
  • これは VyOS のインストール直後に行ったほうが良い
    • VyOS 設定後に Tailscale をインストールすると、VyOS が正常に動作しなくなる場合があった

VyOS を再起動

VyOS で WAN 側ルーティングを設定する

  • PPPoE や DHCP などでインターネットに接続し、Tailscale を動作可能にする

VyOS で Tailscale を起動する

VyOS で WAN 側 VPN にルーティングを設定する

  • 冗長化しない場合は、スタティックルーティングで OK
  • 冗長化する場合は、BGP でダイナミックルーティングさせる

VyOS で LAN 側にルーティングを設定する

  • ホストを直接収容する場合 : VRRP で冗長化する
  • LAN 側に L3 スイッチがある場合 : OSPF / BGP で冗長化する

VyOS に Tailscale をインストールする

VyOS をインターネットに接続する

vyos@West01# set interfaces ethernet eth3 address 'dhcp'
vyos@West01# set protocols static route 0.0.0.0/0 next-hop x.x.x.x 
vyos@West01# set system name-server '8.8.8.8'

x.x.x.x にはインターネットへ抜けられる IP を指定する

VyOS に Tailscale をインストールする

Tailscale の GPG キーとリポジトリを登録

vyos@West01# curl -fsSL https://pkgs.tailscale.com/stable/debian/bullseye.noarmor.gpg | sudo tee /usr/share/keyrings/tailscale-archive-keyring.gpg >/dev/null
vyos@West01# curl -fsSL https://pkgs.tailscale.com/stable/debian/bullseye.tailscale-keyring.list | sudo tee /etc/apt/sources.list.d/tailscale.list

Tailscale をインストール

vyos@West01# sudo apt-get update
Get:1 https://pkgs.tailscale.com/stable/debian bullseye InRelease
Get:2 https://pkgs.tailscale.com/stable/debian bullseye/main amd64 Packages [5,389 B]
Fetched 10.9 kB in 1s (11.5 kB/s)
Reading package lists... Done
[edit]
vyos@West01# sudo apt-get install tailscale
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following NEW packages will be installed:
  tailscale
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 19.2 MB of archives.
After this operation, 35.6 MB of additional disk space will be used.
Get:1 https://pkgs.tailscale.com/stable/debian bullseye/main amd64 tailscale amd64 1.24.0 [19.2 MB]
Fetched 19.2 MB in 3s (6,108 kB/s)
Selecting previously unselected package tailscale.
(Reading database ... 67158 files and directories currently installed.)
Preparing to unpack .../tailscale_1.24.0_amd64.deb ...
Unpacking tailscale (1.24.0) ...
Setting up tailscale (1.24.0) ...
Created symlink /etc/systemd/system/multi-user.target.wants/tailscaled.service → /lib/systemd/system/tailscaled.service.
localepurge: Disk space freed:      0 KiB in /usr/share/locale
localepurge: Disk space freed:      0 KiB in /usr/share/man
localepurge: Disk space freed:      0 KiB in /usr/share/aptitude

Total disk space freed by localepurge: 0 KiB

[edit]
vyos@West01#

Tailscale アカウントに機器を紐づける

vyos@West01# sudo tailscale up --advertise-routes 172.16.0.0/16 --accept-routes=true

To authenticate, visit:

        https://login.tailscale.com/x/accdef

Success.

West01 なので、広報するルートに 172.16.0.0/16 を指定し、別機器から広報されたルートを受け入れるオプションを指定する

出てきた URL をブラウザに貼り付けて、ログインすれば OK

Tailscale にログインして、広報するルートを確定

各プロトコルの設定

BGP

冗長切替のポイント

BGP ピア Down 時は、わたり eth2 の OSPF + iBGP で迂回するか、下位 IGP に対抗拠点宛のルート広報をやめて、下位側で迂回させる

わたりレスとする場合は、下位 IGP Down 時に集約ルートの広報をやめる

Tailscale の TIPS

Tailscale の subnet router は、有効化時に VyOS の動作に影響がある

  • 2 台のルータで同じプレフィックスを advetise-routes すると、片方は通信できない
    • subnet router 冗長化は有料プランのため、Free プランだとこの動作となる模様
    • LAN 側の OSPF も止まる


リファレンス

100台まで無料のVPNサービス「Tailscale 」、リンクだけでマシンのシェアも可能!?

引用

  1. 2021-06-25 T3641 (feature): Upgrade base system from Debian Buster -> Debian Bullseye