SSHとClashで自宅サーバーにリモートプロキシを構築する
// 默认分类 · 2025-02-08 · 阅读 5 分钟 · 174 次阅读
最近ちょっとした悩みがありました。以前は自宅の内網マシンのIPで直接サーバーにアクセスできて便利だったんですが、外出先だとSSHしか使えません。でも、考えてみたら、SSHでSocks5プロキシをトンネルして、Clashでトラフィックを管理すれば、いい解決策になりそうです。
設計案
SSHでSocks5プロキシを設定し、クライアントに自宅サーバーへアクセスするための経路を提供することにしました。そして、Clashを使ってトラフィックをスマートに管理し、Socks5が有効かどうかを検出して、プロキシ経由にするか決めます。手順は実はそんなに複雑じゃないので、見てみましょう。
1. SSHでSocks5プロキシを設定する
まず、SSHでリモートサーバーに接続し、Socks5プロキシを設定します。
ssh -o ServerAliveInterval=60 -o ServerAliveCountMax=3 -o TCPKeepAlive=yes -o ForwardAgent=no -o ForwardX11=no -N -D 127.0.0.1:8080 -p 221 root@*******.cn
このコマンドのパラメーターを説明します:
-D 127.0.0.1:8080:ローカルポート8080で動的ポート転送を開始し、Socks5プロキシとして機能させます。-o ServerAliveInterval=60:60秒ごとに空のパケットを送信し、接続を維持します。-o ServerAliveCountMax=3:接続が応答しない場合、最大3回再試行します。-o TCPKeepAlive=yes:TCP接続のキープアライブ機能を有効にします。-N:ポート転送のみを行い、リモートコマンドは実行しません。-p 221:SSH接続のポートを指定します(サーバーがデフォルトの22番ポートでない場合に指定します)。
これで、ローカルの127.0.0.1:8080ポートを通過するすべてのトラフィックがリモートサーバーに転送されるようになります。
2. Clashを設定してトラフィックを管理する
次に、Clashにプロキシルールを設定し、このSocks5プロキシを経由するかどうかを判断します。Clashのfallback機能を使うと、自動的にトラフィックを切り替えることができます。
ノード:
append:
- name: 'SSH Tunnel'
type: 'socks5'
server: '127.0.0.1'
port: 8080
username: ''
password: ''
ルール:
prepend:
- 'IP-CIDR,192.168.10.0/24,Proxy-local,no-resolve'
プロキシグループ:
prepend:
- type: 'fallback'
name: 'Proxy-local'
interval: 5
timeout: 5000
max-failed-times: 1
lazy: false
proxies:
- 'SSH Tunnel'
- 'DIRECT'
この設定の意味は:
- Clash内でSocks5プロキシを定義し、127.0.0.1:8080を指定します。
fallbackプロキシグループを使用し、Socks5プロキシが有効と検出された場合、トラフィックは自動的にこのプロキシを経由し、そうでなければ直接接続します。- lazyは必ずオフにしてください!名前の通り怠け者で、自動的に有効かどうかを検出しません。
SSHトンネルを優先プロキシとして使用し、SSHトンネルが利用できない場合、トラフィックは自動的に直接接続(DIRECT)に切り替わります。intervalとtimeoutを設定することで、検出頻度とタイムアウトの許容度を制御できます。
こっそりと
この方法の利点は、外出先でもSSH接続を維持しておけば、他のトラフィックは自動的にプロキシを経由するので、便利で仕事の妨げにもなりません。さらに、Clashの自動切り替え機能により、プロキシが利用できない場合でも、トラフィックは自動的に直接接続に戻り、遅延や接続失敗を防ぎます。
技術をいじるのが好きな私にとって、この「リモートワーク」の方法は、生活と仕事をより柔軟で効率的にしてくれます。同じようなニーズがあれば、ぜひこの方法を試してみてください。