Closed5

FortiClient VPN(7.2.3)でプロキシ経由でもVPNの接続したい!!

s10018s10018

プロキシサーバ経由で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を起動しそこで接続したら理屈上は可能だったので、メモ。

https://github.com/adrienverge/openfortivpn

要は踏み台サーバーの上に仮想計算機を置いて、接続したらいけそうだな...タブン

s10018s10018

これでなんとかなりそう

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自体はなくて問題なかった

s10018s10018
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サーバ]

みたいな感じ、多分。

s10018s10018

踏み台AにVPN(Fortinet SSL-VPN)接続用Dockerコンテナ

https://hub.docker.com/r/myon/fortivpn-socks5

$ 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でちゃんとバージョン指定する必要がある点。

このスクラップは7日前にクローズされました