【LN】TunnelSatsでお手軽Hybridモード運用
UmbrelでLNノードを運用し始めて1年半近くになりますが、ここ数か月は時々再起動しないとチャンネルの大半がオフラインになってしまう現象に悩まされていました。
先日もこんな調子で愚痴っていたところ、チャンネルを繋いでいる海外のLNユーザからTor接続が原因ではないかと指摘がありました。
Umbrelはノード間の接続にデフォルトでTorを使用します。これによりノード立ち上げに際して外部からアクセスするための固定グローバルIPを確保しなくて済み、ひいては匿名性を向上させてくれるメリットがあります。
一方、Torはノード間をリレーして通信する仕様上、通信速度はどうしても遅くなってしまうデメリットがあります(自分のノードに外出先からTorブラウザでアクセスすると実感できます)。特にこの頃はユーザ数の増加のためかこの遅さが際立っており、場合によっては私のノードのようにチャンネルのオフラインを引き起こします。
この問題を解決するにはTor以外にインターネットを介した接続(いわゆるClearnet)に対応する必要があります。TorとClearnetの二刀流はHybridモードと呼ばれ、LNDではv0.14から対応していますが、設定すればすぐ使えるというものではありません。
Umbrelを直接インターネットからアクセスできるようにするなら固定グローバルIPが必要ですし、不正アクセスへのセキュリティにも気を配る必要があります。また、外部にVPSを借りてVPNサーバをセッティングし、そこを経由してインターネットにアクセスさせる方法もあります。ただこれも設定が煩雑ですしVPSを借りるにもコストがかかります(手順の詳細は下記のリンクを参照ください)。
そんなわけでHybridモード運用については知ってはいるものの二の足を踏んでいた…というわけですが、前述のLNユーザからこれを解決する面白いサービスを紹介してもらいました。それがタイトルにあるTunnelSatsです。
TunnelSatsとはどんなサービスか
ざっくり言うと、TunnelSatsが管理するVPNサーバの利用権を販売するサービスです。上に貼ったリンク(実はTunnelSatsの中の人がサービス立ち上げの前に書いた記事)で実現しようとしていることと同様、ユーザのLNノードはClearnetとの通信にこのサーバとの間に確立したVPNトンネルを利用します。
※ネットワーク構成図はTunnelSatsのFAQから拝借してきました
VPNサーバ側の設定はTunnelSatsが行ってあるのはもちろんのこと、ユーザ側の設定もシェルスクリプトを実行してLNDの設定ファイル(lnd.conf)を書き換えるだけで実現できます。なお、この際に実行するスクリプトについてはGitHubで公開されているため検証可能です。
また、VPNの仕組み自体はオープンソースのWireGuardを使用しているようです。WireGuardはVPNの中では歴史の浅い部類ですが、LNノードランナー御用達のTailscaleのベースとして使われている技術だったりします。
利用手順
1. 購入~設定ファイル入手
まずTunnelSatsのサイトで利用権を購入します。利用するサーバ(私が始めたときはドイツ/アメリカの2か所でしたが、色々あって最近シンガポールが増えました)と契約期間(1/3/6/12か月の4種類、長いほど割引あり)を選び、Generate Invoiceボタンをクリックします。すると支払用のインボイスが発行されます。
お察しの通り決済手段はLN払いのみです。2022年8月現在で概ね1か月12000sats程度、日本円で400円程度で利用できます。この値段設定は絶妙で、国内でVPSを借りようとすると最低プランでもこれより高くなるかと思います。またサトシ単位で表示される関係で、自分のルーティング収益と照らし合わせて固定費として支払っても黒字化できるか検討しやすいです。
なお、このインボイスは必ずしもサービスを利用したいノードから支払わなくても構いません。モバイルウォレットからでも良いですし、誰かに払ってもらっても構いません(Spotlightのポイント交換先に追加してもらえるといいなぁ)。
支払いを終えるとこの後の設定で利用するファイルをダウンロードできます。
TunnelSatsのサイトにはユーザアカウントの仕組みも無ければ、購入にあたってKYCもありません。したがっておそらくですが、このタイミングで設定ファイルを控え忘れると2度と入手できないと思われます。確実にダウンロードし、バックアップを取っておきましょう。なお、ファイル名の「tunnelsatsv2.conf」についてはこの後実行するスクリプトで見ているため、変えてはいけません。
2. ノードの設定
公式サイトの手順に従って作業を進めます。
まずノードにSSHで接続し、Githubから設定用スクリプトをダウンロードします。
umbrel@umbrel:~$ wget -O setupv2.sh https://github.com/tunnelsats/tunnelsats/raw/main/scripts/setupv2.sh
スクリプトをダウンロードし終えたら同じディレクトリに先ほどダウンロードしておいた「tunnelsatsv2.conf」を配置し、スクリプトを実行します。
umbrel@umbrel:~$ sudo bash setupv2.sh
スクリプトはWireGuardのインストールと設定、起動を自動的に実行し、最終的にlnd.confに書き加える情報を出力するので控えておきます。
These are your personal VPN credentials for your lightning configuration.
LND:
#########################################
[Application Options]
listen=0.0.0.0:9735
externalhosts={VPNのDNS}:{ポート番号}
[Tor]
tor.streamisolation=false
tor.skip-proxy-for-clearnet-targets=true
#########################################
Please save them in a file or write them down for later use.
次にlnd.confを編集します。Umbrelのv0.5.0以降であれば、デフォルトで「/home/umbrel/umbrel/app-data/lightning/data/lnd/lnd.conf」にあるはずです。「Application Options」セクションの下に「externalhosts={VPNのDNS}:{ポート番号}」を、「Tor」セクションの下に「tor.skip-proxy-for-clearnet-targets=true」を書き加えます。書き加えたら設定変更を有効にするため、ノードを再起動します。
以上で設定は完了です。非常にお手軽です。
3. 動作確認
WireGuardの動作自体は下記のコマンドで確認できます。
umbrel@umbrel:~$ sudo wg show
実行するとVPNトンネルの接続実績が表示されます。
interface: tunnelsatsv2
public key: fhniYWC58NuLZ4yBFz+b6hBC900+03F8NrEwss1pfXA=
private key: (hidden)
listening port: 41250
fwmark: 0x3333
peer: btdogG1xEId2/6qsVMATV196uTBzUQpO8ZUkNsBOWn8=
preshared key: (hidden)
endpoint: 46.101.122.181:51820
allowed ips: 0.0.0.0/0, ::/0
latest handshake: 35 seconds ago
transfer: 1.31 MiB received, 350.61 KiB sent
また、AmbossではClearnet対応しているノードのグローバルIPによってノードの所在地をざっくり表示する機能があります。TunnelSatsを使用した場合は最初に選択したVPNサーバの所在地となるため…こんな感じになります。
なお、面白がってこんなツイートをした結果、
アジア枠としてシンガポールにサーバを追加してもらっちゃいました
ーーー
さて、ここまでくるとTorとClearnetでどれだけ通信速度に差があるか気になるところです。有料部分ではその辺りを検証してみたのでご確認ください。
ずいずいさんの記事とMarimoxさんの記事のおかげで導入できました。ありがとうございます!