通常のSSHで接続できるのにVS Code の Remote-SSH だと繋がらないときの対処。

この記事は約3分で読めます。

スポンサーリンク

はじめに

本記事は、iptablesを検証設定し、Remote-SSHで繋げられないという内容です。
そもそも本事象や、同様な原因という可能性は極めて低いですが、備忘録として記します。

スポンサーリンク

事象内容

ターミナル等で、SSH接続をすると、問題なく接続できますが、
vscodeのRemote-SSH機能を使用すると、接続中にエラーが起こり接続できません。

リモートホストのiptables上のInput Chainでは、22番ポートをACCEPTし、
他の通信(確立した関連の通信を除く)をブロックしています。

Chain INPUT (policy DROP 65 packets, 5490 bytes)
pkts bytes target prot opt in out source destination 
1797 186K ACCEPT 0 -- * * 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
2 128 ACCEPT 6 -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22

原因

ローカルループバックインターフェースからの接続は許可していなかった。

以下のように許可してあげることで解決しました。
(OutputもDROP Policyの場合は、ACCEPTが必要です)

iptables -A INPUT -i lo -j ACCEPT

vscodeのRemote-SSHは、SSHで指定したポート(22)でリモートサーバに接続した後、
ダイナミックポートフォワーディング(SOCKSプロキシ経由)にて通信していました。

リモートサーバの動的にポートをSOCKSプロキシがリッスンし、ローカルマシンと直接通信するため、INPUT Chainへの追加が必要です。

なお、外部からloに偽装したトラフィックが流れてくる恐れがあり、
ループバックアドレス範囲外はDROPするように設定します。

iptables -A INPUT -s 127.0.0.0/8 ! -i lo -j DROP

おわりに

dockerでのインフラ構築の一環として、iptablesを学んでいました。
初期設定は、INPUTがACCEPT Policyでパーパーなのできちんと学んで設定していかなくちゃいけないです。

一定のルールは、検証前に追加しておくべきでした。
ループバックの許可やら、確立した通信の許可やら。

ただ、本原因とは別にこういった事象が起こるケースがあるみたいで、
そのときは、vscodeのsetting.jsonにて、Remote.SSHの記述をすることで
解消されるかもしれません。

Support custom remote ports · Issue #1386 · microsoft/vscode-remote-release
TLDR; When connecting to vscode-server, the incoming port from the server's perspective is random, so a new firewall exception for port XYZ ingress needs to be ...

 

コメント

スポンサーリンク
スポンサーリンク
タイトルとURLをコピーしました