インターネット接続環境と VPN 接続環境を両立する

Posted on 2019-02-16 in zakki

背景

AWS EC2 でインターネットに出ない環境の HTTP/S を自宅のブラウザから覗きたかったため。

( 真の ) 背景

何、真のって。

会社 AWS に LibreNMS 立てようとしたら、立ったはいいけどグラフ全然見えねーのウケる。困ったのちの検証。

あとそのとき色々見るからインターネットに接続していてほしい。

softether で VPN

自宅と AWS EC2 を softether で VPN します。 ここ あたり見ながら。

記事中だとセキュリティグループで全開けしているところがあるけど、それもどうなのってことで全部グローバル IP で縛りました。他は全部一緒。

インターネットが見れない

VPN 接続後ですが、特に何もいじらないとインターネットが見ることができなくなりました。

対処

ルーティング追加

ルーティングを追加します。

route add -p (VPN 接続経由で接続したいネットワーク ) mask ( サブネットマスク ) (VPN 接続時のゲートウェイ )

まだ見れない

ちょっと調べてみる。

…。

どうやら IF のメトリックが影響していて、メトリックの小さい IF に紐づくゲートウェイ設定を参照し接続しようとするためです。VPN ( 仮想 LAN ) の IF メトリック値は 1 だそうです 。小さいっすね。これはいけません。

メトリック値を修正

メトリック値を修正します。

  • [ ネットワーク接続 ] - [( 仮想 LAN 用インターフェース ) プロパティ ] - [ ネットワークタブの IPv4 のプロパティ ] - [ 詳細設定 ] - [IP 設定 ]
    • 自動メトリクスのチェックをオフ。
    • IF メトリックをインターネットに使う IF の値より高くする。
    • 他のは何で分かるんだよ、ってプロンプトで netsh interface ipv4 show config ってやったら全部出てくるからそれ見てね。

僕は 5000 にしました。

でも

この状態で改めて VPN 接続をしても相変わらずダメ。辛い。

ゲートウェイメトリック

改めてコマンドプロンプトを見てみる。仮想 LAN IF の ゲートウェイメトリック とやらが 1 となってて非常に臭い。

ゲートウェイメトリックの説明が見つからなかったのでアレではありますが、このメトリック値も変えて試したいなあ、と思ったけどそもそも GUI に値を設定できる項目が無い。悲しみましたが、よく考えたら最終的に使用できなくすればよいのでは?、と思ったので、 リモートネットワークでデフォルトゲートウェイを使う のチェックを オフ にしました。

さらなる作業

もしかしたらここまでで上手く通る方もいらっしゃるかもしれません。僕は駄目でした。正確に言うと、インターネットは見られるようになりましたが、VPN 側の疎通が NG でした。なんでだよ …。改めて設定値を眺めていてもよくわからなかったので、適当にコマンドポチポチ打っていたら、何故か急に VPN 側も疎通が通るように。「ええ … なにこれ」と思いつつ確認。

  • 打ったコマンドと状況
    • VPN 接続確立時に、
    • route delete (VPN 接続経由で接続したいネットワーク )
    • route add (VPN 接続経由で接続したいネットワーク ) (ry
    • 要するにルート再登録

新旧で route print を見てみると、static ルートの登録内容が異なっています。

  • 旧:「インターフェース」が ( 物理 IF のローカル IP) # 一部表示を消しています。
  • 新:「インターフェース」が (VPN 接続時に使用するローカル IP( 仮想 ))

旧状態だとアクティブルートが物理 IF のローカル IP であったがために想定しないルーティングとなってしまっていましたが、新状態にすることにより、ルーティングが仮想 LAN IF に乗り正常に疎通が通った、と解釈しました。

意図しないアクティブルートが登録される例は OS 再起動等などによく見られるよう で、対処としてはオプションである IF 番号を加え登録するよう記載されています。

IF 番号は netsh interface ipv4 show interface で得れるのですが、仮想 LAN の IF 番号は VPN 接続状態で無いと表示されませんでした。

加えて、IF 番号が判明後、改めて VPN 接続を行っていない状態でコマンド投入してもエラーとなりました。

VPN 接続後に IF 番号を確認してから、static ルートの登録を行うのが分かりよいのかなあ、と思います。

考えてみると

  • メトリック値修正中
    • ゲートウェイが 仮想 LAN IF だから VPN 接続「のみ」OK だった
  • メトリック値修正後
    • ゲートウェイが 物理 IF に変化して VPN 接続のルーティングが想定しないものに
    • インターネット接続は物理 IF を使用して行っているため問題が無くなる

ということか。

結果

  • インターネット接続環境と VPN 接続環境を両立できました。
    • softether による VPN 接続導入直後はインターネットに接続できなくなった。
    • 仮想 LAN IF の自動メトリクスをオフ。メトリクスを値を設定する。
    • 仮想 LAN IF のゲートウェイメトリクスをオフにする。
    • 仮想 LAN 宛てのパケットが 仮想 LAN IF 向けになるように static ルートを登録する。
    • VPN 接続中に登録するとうまく行くように思える。

肝心の

LibreNMS だけど本日構築したらばっちりグラフも見えたので、じゃあ何が悪いんだよ状態。あれか、日ごろの行いか。

Windows Softether VPN