iPhoneテザリング時にSOCKSプロキシを使ってVPN over SSHする。

グローバルIP環境でpingも通ってポートも開いてるのにどうも相変わらずSoftEtherの調子が悪い(ポートマッピングでTCP443とかUDP500、4500とか開けてもIPSec Phase 2に移行しない)のでmacOSからのVPN接続は本格的にSOCKSプロキシで運用することにした(Windows環境ではSoftEtherのVPN Azureだけで一瞬で終わる)。macOS+テザリングだとSOCKSプロキシが使えない(使えないというかGUIの設定上ではWi-FiアダプターとかじゃないとSOCKプロキシが設定できない)ので、Terminal上で設定する。

iPhone USB経由のVPN over SSHを実装する一番シンプルな方法は(少なくともシステム環境設定からはできない)、iPhoneにテザリングで接続できている状態でまずはSSHに繋ぐ(SSHの後にテザリングするとBroken Pipeしたりする)。-Dオプションでアプリケーションレベルのポートフォワーディングを設定する。今回は仮に10000番で。

% ssh -D 10000 <USERNAME>@<HOSTNAME>

今回はiPhone USB経由でテザリングをしているので、iPhone USB経由の通信に10000番ポートのSOCKSプロキシを設定してあげればいい。つまりnetworkstupのsetsocksfirewallproxyオプションで、どのネットワークアダプタにsocksプロキシを通すのかを設定してあげればいいので…

% networksetup -setsocksfirewallproxy "iPhone USB" localhost 10000

これだけ。以降はiPhoneつないで-D付きでsshするだけで自動で繋がる。切るときは…

% networksetup -setsocksfirewallproxystate "iPhone USB" off

後はSSHを公開鍵認証にしたりautosshを設定したりしてセキュリティを上げつつサクッと接続できるようにしていけばよい。

SoftEtherのために開けてた余計なポートは全部閉める。セキュリティのために。