Tailscaleの使い方、その6:レンタルVPSサーバにアクセスする
VPNまとめを参照されたい。
Tailscaleの使い方、その5では、レンタルVPSサーバをExit Nodeにしてみた。つまり、VPSの目的2である。以下では、VPSの目的1、つまり、Tailscale経由で安全にVPSサーバの中をいじくることを考えてみる。
安全でないサービスの立ち上げ
Tailscale経由の暗号化された通信路を使うので、その通信路の中では、昔ながらの安全でない単純なサービスを使うことができる。例えば、telnetやftpである。これらは送受信データが暗号化されていないため、インターネットを生のままでそのデータを送受信するケースはあまりないだろう。しかし、Tailscaleによる「仮想的なLAN」の中では誰も見ることができないので構わない。
dnf install telnet-server
systemctl enable telnet.socket
systemctl start telnet.socket
dnf install vsftpd
systemctl enable vsfftpd
systemctl start vsftpd
これでtelnetとftpのサーバが起動したはずだ。
※ちなみにrootアカウントでftpにアクセスするには、/etc/vsftpdにあるuser_list, ftpusersからrootを削除しておく。
Firewallに穴を開ける
これだけでは、まだファイアウォールに阻まれてアクセスができない。Tailscaleをインストールして起動した時点で、仮想的なネットワークインターフェース(NIC)のtailscale0というのが作成されているはずで、Tailscale経由の通信はすべてここを通る。したがって、このNICは全面的に信頼できるものと指定しなければならない。デフォルトでは、telnetやftpの通信はブロックされてしまう。
TailsaleのAdmin Consoleを見た場合、このマシンは以下になる。
このマシン上で調べてみると、以下の表示になる。
# ifconfig tailscale0
tailscale0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST> mtu 1280
inet 100.68.68.69 netmask 255.255.255.255 destination 100.68.68.69
inet6 fd7a:115c:a1e0:ab12:4843:cd96:6244:4445 prefixlen 128 scopeid 0x0<global>
inet6 fe80::7afd:4cd0:25be:5c28 prefixlen 64 scopeid 0x20<link>
unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 500 (UNSPEC)
RX packets 35 bytes 1486 (1.4 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 43 bytes 1984 (1.9 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ファイアウォールの状態は以下である(長いのでかなり省略)
# firewall-cmd --list-all-zones
public (active)
target: default
icmp-block-inversion: no
interfaces: eth0
sources:
services: cockpit dhcpv6-client ssh http https
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
trusted
target: ACCEPT
icmp-block-inversion: no
interfaces:
sources:
services:
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
publicというゾーンには外向けのNICであるeth0が属している。ここでは、最小限のポートしか開けておらず、それ以外の外からの通信はブロックされる。trustedは全面的に信頼できるNIC用の設定で、ここにtailscale0という仮想的なNICを所属させることにする。
firewall-cmd --add-interface=tailscale0 --zone=trusted
※巷の例では、ここに–permanentをつけてすぐに恒久化させる例があるが、なぜか–permanentをつけるとうまく行かない。そもそも、そういった使い方はfirewall-cmdの想定するところではないだろう。設定がうまく行ったら、最後に恒久化させることにする。つまり、メモリ上だけの設定ではなく、設定ファイルとしてセーブし、OS再起動後にも有効にする。
すると以下になる。
# firewall-cmd --list-all --zone=trusted
trusted (active)
target: ACCEPT
icmp-block-inversion: no
interfaces: tailscale0
sources:
services:
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
接続テスト
telnet
この状態で、Tailscale上のIPアドレスを指定すれば、telnetに接続できるはずである。手元のWindowsでtelnetを動かしてみる。
telnet 100.68.68.69
すると、プロンプトが返ってくる。これだけで成功だとわかる。
login:
ちなみに、外向けのNICからtelnetに接続してみる。このNIC経由ではtelnetポートにアクセスできないことがわかる。
ftpテスト
Filezillaを使ってアクセスしてみた。入力は以下の三つ。
- 100.68.68.69
- root
- rootのパスワード
簡単にアクセスできる。
アクセス図
図で書くと以下のようなイメージだ。
もちろん、上の暗号化された通信路は実際には以下のような具合だ。正確ではないかもしれないが、おおよそこんな感じだろう。
firewall設定を恒久化する
設定がうまく行ったら、firewallを恒久化する。何かしらうまく行かず、今回の作業ではありえないが、例えば、外側からSSHでさえも接続できなくなってしまったなどの事態があれば、OSを再起動すれば変更前の状態で起動する。
以下で、現在のメモリ上のみのルールを、再起動後にも適用するように設定ファイルに書き込む。
firewall-cmd --runtime-to-permanent
ディスカッション
コメント一覧
まだ、コメントがありません