特定のサーバにSSH接続をする際、VPNを経由しないと接続できないような制限をもうけられていることがあった。

MacのVPN接続設定のオプションで、「すべてのトラフィックをVPN経由で送信」にチェックを入れておかないと、サーバにアクセスできなかった。が、これではVPNを経由する必要のないデータまでVPNを経由するようになってしまう。

サーバに接続する場合にのみ、VPNを経由するような設定をした。

参考にしたのは、こちら

 

sudo vi /etc/ppp/ip-up

以下のように編集し保存。

#!/bin/sh
 
if [ "$4" = "YYY.YYY.YYY.YYY" ]; then
    /sbin/route add -net XXX.XXX.XXX.XX1 ZZZ.ZZZ.ZZZ.ZZZ
    /sbin/route add -net XXX.XXX.XXX.XX2 ZZZ.ZZZ.ZZZ.ZZZ
    /sbin/route add -net XXX.XXX.XXX.XX3 ZZZ.ZZZ.ZZZ.ZZZ
    /sbin/route add -net XXX.XXX.XXX.XX4 ZZZ.ZZZ.ZZZ.ZZZ
fi

XXX.XXX.XXX.XX1〜4 は、VPN経由させたいサーバのIP。
YYY.YYY.YYY.YYY は、VPN経由した際のローカルIP。
ZZZ.ZZZ.ZZZ.ZZZ は、VPN経由した際のゲートウェイのIP。
参考サイトでは、interface-name が ppp0 かどうかで分岐していたが、VPN接続先が複数あったため、VPN経由した際のローカルIPで分岐するようにした。

# 2011/05/02 追記
# VPN経由した際のローカルIPが固定でなかったので、条件部分を書き換え
if [[ ! -z `echo “$4” | egrep “^YYY.YYY.YYY.[0-9]+$”` ]]; then
#if [ “$4” = “YYY.YYY.YYY.YYY” ]; then (←古いこっちはコメントアウト)
/sbin/route add -net XXX.XXX.XXX.XX1 ZZZ.ZZZ.ZZZ.ZZZ
/sbin/route add -net XXX.XXX.XXX.XX2 ZZZ.ZZZ.ZZZ.ZZZ
/sbin/route add -net XXX.XXX.XXX.XX3 ZZZ.ZZZ.ZZZ.ZZZ
/sbin/route add -net XXX.XXX.XXX.XX4 ZZZ.ZZZ.ZZZ.ZZZ
fi

ファイルのパーミッションを変更

sudo chmod 744 /etc/ppp/ip-up

最後に、VPN接続設定の「すべてのトラフィックをVPN経由で送信」のチェックをはずして変更を保存適用。

設定が有効かどうかを調べるために、↓のコマンドで確認。設定した分の行が表示されればOK。(VPN接続中のみ表示される。切断すると表示されないことも合わせて確認。)

netstat -rn | grep ZZZ.ZZZ.ZZZ.ZZZ

これでVPNを接続するたびにこの設定が有効化され、特定の接続先のみVPN経由されるようになる。
ためしに確認くんを開くと、VPN経由しないIPから接続していると表示され、その状態のままサーバにVPN経由で無事SSH接続することができた。

コメントは受け付けていません。