FortiClient VPN(7.2.3)でプロキシ経由でもVPNの接続したい!!
プロキシサーバ経由でFortiClient VPN(7.2.3)をつなぎたいのに設定がないじゃん!!
(後バージョンでつながるか未試し)
なにがダメなの
VPNはネットワーク全体をVPNサーバとして接続するのに対し、
プロキシはアプリケーションごとに設定しないといけないので、
アプリ側(今回はFortiClient VPN)で設定できないと無理。
VPNサーバ経由じゃないと接続できないSSHサーバBがある→
FortiClient VPN(7.2.3)にプロキシの設定ができない→
じゃあ踏み台サーバーを用意して、そこのサーバーからVPNで接続していけばいけるか...?
- SSHなら例えば以下のコマンドでいけるが、、、踏み台サーバAをVPNを接続すると(多分もちろん)そのVPNサーバのIPアドレスになってしまうので、意味なし。
仮の例
プロキシのサーバ:proxy.hogehoge.com
プロキシのポート:8888
ssh -o Proxycommand="nc -X connect -x proxy.hogehoge.com:8888 %h %p" 接続先
どうする?
sshで別のサーバーAにアクセスし
サーバーAのdockerのコンテナ
上にopenfortivpn
を起動しそこで接続したら理屈上は可能だったので、メモ。
要は踏み台サーバーの上に仮想計算機を置いて、接続したらいけそうだな...タブン
これでうまくいきそうというメモ
これでなんとかなりそう
sudo docker run --cap-add=NET_ADMIN --device=/dev/ppp --rm -v "[自分のopenfortivpnの設定ファイル]:/etc/openfortivpn/config:ro" myon/fortivpn-socks5
[自分のopenfortivpnの設定ファイル]
host = VPNサーバのIPアドレス
port = ポート
username = 自分のユーザID)
password = パス
trusted-cert = ....
trusted-cert は一回実行したときにでてきたのをそのまま貼ったら通った....
Dockerがわからないので間違った認識かもしれないが、
-v "[自分のopenfortivpnの設定ファイル]:/etc/openfortivpn/config:ro"
は、[自分のopenfortivpnの設定ファイル]をコンテナの/etc/openfortivpn/config
と置き換えるみたいな意味みたいっぽいので、openfortivpn自体はなくて問題なかった
sudo docker run --cap-add=NET_ADMIN --device=/dev/ppp --rm -v "[自分のopenfortivpnの設定ファイル]:/etc/openfortivpn/config:ro" myon/fortivpn-socks5
したあとに
ssh -o ProxyCommand="nc -x 172.17.0.2:8443 %h %p" [接続先サーバー]
で通る。172.17.0.2
はコンテナのIPアドレス?らしい。ので、元repositoryの通りにそのままで通るのではないかなあ....
[クライアント] <- Port:8443-> [myon/fortivpn-socks5] <- VPN -> [VPNサーバ]
みたいな感じ、多分。
踏み台AにVPN(Fortinet SSL-VPN)接続用Dockerコンテナ
$ sudo docker run -itd --cap-add=NET_ADMIN --device=/dev/ppp --rm -v "[設定ファイル]:/etc/openfortivpn/config:ro" myon/fortivpn-socks5
[設定ファイル]
host = [VPNサーバのIPアドレス]
port = [VPNサーバのポート]
username = [VPNの略]
password = [VPNの略]
trusted-cert = 一回試しに接続したときに出てくるもの
上をすると、しばらくはバックグラウンドで動き続ける(-itd
がきっとそれをやってくれている)
手元端末のSSHの設定
Host [踏み台A]
User [踏み台Aのユーザ名]
HostName [踏み台Aのホストネーム]
Match originalhost [踏み台A] Exec "ipconfig getsummary [自分のWifiのデバイス名] | awk -F ' SSID : ' '/ SSID : / {print $2}' | /usr/bin/grep -q '^[プロキシが必要なアクセスポイント]$'"
Proxycommand /usr/bin/nc -X connect -x proxy.hogehoge.com:8080 %h %p # HTTPSプロキシじゃないなら「-X connect」を変えること
Host [接続したいサーバ]
User [接続したいサーバのユーザ名]
HostName [接続したいサーバのホストネーム]
ProxyCommand ssh -q [踏み台A] '/usr/bin/nc -x 172.17.0.2:8443 %h %p'
これで以下のコマンドが通り、[接続したいサーバ]といけた
$ ssh [接続したいサーバ]
Match originalhost
は知らなかった、、、Match originalhost [踏み台A] exec [コマンド]
で、返り値が0
になるとオプションを追加してくれるらしい。
注意ポイントはnc
でちゃんとバージョン指定する必要がある点。