IP制限をかけた環境の疎通確認をするとき、自分の接続元IPだけ例外として許可したいことがある。

ただ、自宅回線のグローバルIPは固定ではないので、ルーター再起動などでIPが変わる。

そのたびに許可IPを変更するのは面倒なのでさくらVPSを踏み台にする。

SoftEther VPNなどでIPsecを使ってもよかったけどSSHが使えるのでローカルPC上で完結するならこっちの方が楽なのでSOCKSを使った。

やりたいこと

構成はこんな感じ。

Firefox
localhost:1080
SSH
さくらVPS
Internet

SSHでSOCKSプロキシを作る

SSHのDynamic Port Forwardingを使う。

今回は1080番ポートを設定する。

ssh -D 1080 Bastion

Bastion~/.ssh/configに登録しているVPS。

次のように設定する。

Host Bastion
    HostName xxx.xxx.xxx.xxx
    User username
    IdentityFile ~/.ssh/id_ed25519

SSH接続中は、

127.0.0.1:1080

がエンドポイントになりSOCKSプロキシとして待ち受ける。

待ち受け確認

macOSならlsofで確認できる。

lsof -iTCP:1080 -sTCP:LISTEN

例えば、

COMMAND   PID   USER   FD   TYPE   NAME
ssh       ...   ...    ...  TCP    localhost:socks (LISTEN)

のように出力される。

curlでVPS経由になっているか確認

Firefoxを設定する前にcurlで確認する。

curl --proxy socks5h://127.0.0.1:1080 https://ifconfig.me

表示されるIPがさくらVPSのグローバルIPになっていれば成功である。

socks5hを使うと、ホスト名の名前解決もSOCKSプロキシ側で行われる。

FirefoxだけSOCKS経由にする

今回はMac全体をVPS経由にする必要がなかったので疎通確認に使うFirefoxだけプロキシを通す。 というよりもchromeとFirefoxでそれぞれIP制限されている、されていないブラウザ用意できて便利なのでこういう構成にした。

Firefoxの

設定
一般
ネットワーク設定
接続設定

を開いて、「手動でプロキシを設定する」を選択。

SOCKS Host:

127.0.0.1

Port:

1080

SOCKSのバージョンは、

SOCKS v5

を選択。

さらに、

SOCKS v5を使用するときはDNSもプロキシを使用する

も有効にしておく。

これでFirefoxの通信だけがVPS経由になる。

IP制限の疎通確認に使う

例えばサービス側で、

許可IP:
xxx.xxx.xxx.xxx/32

のように接続元IPを制限している場合このIPにさくらVPSのIPを登録しておく。

通常の自宅回線からアクセスすると拒否される。

FirefoxをSSH SOCKS経由にすると、

Firefox
SSH SOCKS
さくらVPS
IP制限されたサービス

となりサービス側からはVPSのIPから接続しているように見える。