Tailscale SOCKS5ポートを公開してプロキシソフトウェアで使用する
💡私は長期間ClashやQuantumult Xなどのソフトウェアを使用しており、Tailscaleで内部ネットワークサービスを構築した後、内部ネットワークサービスにアクセスするたびにソフトウェアを切り替える必要があります(Tailscaleクライアントと上記プロキシソフトウェアは同時に1つしか実行できません)。これは不便です。そのため、内部ネットワークプロキシノードをプロキシソフトウェアに追加し、分流ルールを設定して、頻繁なソフトウェアの切り替えを不要にすることを検討しました。
Tailscaleコンテナのデプロイ
Userspace networking mode (for containers) を参照し、Tailscaleコンテナをデプロイしてsocks5ポートを公開します。
docker run -d \\ --name tailscale-socks5 \\ --restart=unless-stopped \\ --cap-add=NET_ADMIN \\ -e TS_USERSPACE=true \\ -e TS_SOCKS5_SERVER=0.0.0.0:1055 \\ -p 127.0.0.1:1055:1055 \\ -v /var/www/tailscale-socks5:/var/lib/tailscale \\ tailscale/tailscale:latest tailscaled --tun=userspace-networking --socks5-server=0.0.0.0:1055:1055ポートがリッスンされているか確認:
docker exec -it tailscale-socks5 ss -tulnTailscaleを起動してログイン:
docker exec -it tailscale-socks5 tailscale up --accept-dns=false --accept-routesログイン成功後、Tailscaleコンテナが公開するsocks5ポートが正常に動作するかテスト:
curl --socks5 127.0.0.1:1055 <http://tailscale> 内部ネットワークサービスただし、このsocks5には認証(ユーザー名/パスワード)がありません。やや安全に公開ネットワークに公開するために、ユーザー名/パスワード認証付きのSOCKS5プロキシをデプロイし、その送信トラフィックをTailscaleの認証なしSOCKS5サービスに転送することを検討します。
kechangdev/s2sコンテナのデプロイ
プロジェクトアドレス:https://github.com/kechangdev/s2s
以下の例では、このコンテナを起動し、ローカルポート45675でリッスンし、ユーザー名/パスワードをそれぞれusername / passwordに設定し、トラフィックをローカルの認証なしSOCKS5プロキシ127.0.0.1:1055に転送します。
docker run -d --network host \\ --name tailscale-s2s \\ -e SOCKS5_USERNAME="username" \\ -e SOCKS5_PASSWORD="password" \\ -e TS_SOCKS5_HOST="127.0.0.1" \\ -e TS_SOCKS5_PORT="1055" \\ -e INBOUND_PORT="45675" \\ kechangdev/s2s:latest| 変数名 | デフォルト値 | 説明 |
|---|---|---|
SOCKS5_USERNAME | username | 受信SOCKS5認証に使用するユーザー名 |
SOCKS5_PASSWORD | password | 受信SOCKS5認証に使用するパスワード |
TS_SOCKS5_HOST | 127.0.0.1 | 送信SOCKS5のアドレス(例:Tailscaleが提供するsocks5) |
TS_SOCKS5_PORT | 1055 | 送信SOCKS5のポート |
INBOUND_PORT | 45675 | 本コンテナが外部に公開するSOCKS5ポート(ユーザー名/パスワード認証あり) |
説明:
--network hostは通常、コンテナがホストとネットワーク名前空間を共有し、ローカルのTailscale SOCKS5に簡単に接続できるようにするために使用します。必要に応じて他のネットワークモードを使用しても、コンテナがTS_SOCKS5_HOST:TS_SOCKS5_PORTにアクセスできれば構いません。- リッスンポートを変更する場合は、起動時に
INBOUND_PORTを変更し、それに応じてポートマッピングを行ってください。
テスト:
curl -v --socks5 127.0.0.1:45675 -U username:password <http://tailscale> 内部ネットワークサービス対象ページの内容が正しく返ってくれば、プロキシチェーン全体が正常に動作しています。
ソフトウェア設定
Quantumult Xを例に:
- Socks5ノードの設定:
socks5=IP:Port, username=XXX, password=XXX, fast-open=false, udp-relay=false, server_check_url=http://tailscale 内部ネットワークサービス, tag=tailscale- ポリシーグループの設定:
static=Tailscale, tailscale- 分流ルールの設定:
; Tailscaleip-cidr, 100.64.0.0/10, Tailscaleこれで、Tailscale内部ネットワークに違和感なくアクセスできます:

注意
TLS/SSHトンネル や Fail2Ban などの方法でセキュリティを強化することを強くお勧めします。SOCKS5 + ユーザー名/パスワードのみで公開ネットワークに公開することは、潜在的なリスク(ブルートフォース攻撃、パケットキャプチャなど)があります。