1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

異なるFirewall内の二つのプライベートネットワークをSoftEtherVPNで拠点間接続してみた

Last updated at Posted at 2019-05-01

#概要
職場のプライベートネットワーク(192.168.32.0/24)と自宅のプライベートネットワーク(192.168.1.0/24)をFirewallの設定を変えることなくVPNで拠点間接続した。Firewall3枚を貫通するVPN常時接続(下図の最下段)を構築した。この目的のためには、VPS1つ、プライベートネットワーク内のサーバ2台があれば十分。
vpn.002.png

##解決すべきだった課題
沢山あるので、列挙しておきます。

  • 職場の組織は大きなネットワークを構成し、セキュリティが厳しく外部(インターネット)と接続できる固定IPの発行を制限している。このFirewallは、事実上NATでhttpとhttpsしか通していない。
  • 更に、職場ではこのFirewallの中に更にゆるいFirewallを構築している。
  • 職場の組織では某メーカー製のVPN接続を提供しているが、端末にクライアントをインストールしなければならず、当然のことのようにWindowsとMacしかサポートされていない。サーバ間のVPN接続はできない。
  • ここでは詳細を述べないが、今回の試行の中途で組織内のネットワークに接続し、PC端末から、あらゆるリソースにアクセスすることは出来ていた(いわゆるリモートVPNアクセス)ので、拠点間の接続は必須ではなかったが、自宅のサーバから職場のサーバにアクセスするためにはVPN接続されたPC端末へのログインを経由してから、職場のサーバにログインしなければならず、直接職場のサーバに接続することはできなかった。
  • Local Bridgeの設置で、Linuxに固有の問題があることに気付かなかった。ドキュメントを良く読めば書いてあったのですが。。。

###要するに
PV1 -> FW1->FW2<=>Internet<=>FW3<-PV2

PV1 <=> FW1<=>FW2<=>Internet<=>FW3<=>PV2
としたかった訳ですが、SoftEtherVPNとcloudのVPSを使えばVPNリモートアクセス
PV1<=>FW1<=>FW2<=>VPS<=>Internet

Internet<=>VPS<=>FW3<=PV2
は比較的簡単にできますが、PV1とPV2を同時に常時接続したかった訳です。
(PV: private network, FW: Firewall)

##解決策

  • Internet側からFirewall内にVPN接続するためには、インターネット上の固定IPが必要です。そこで、VPSをレンタルすれば、インターネット上の固定IPを取得できます。
  • 後で分かったのですが、最初にリモートVPN接続を設定した際にBridge接続したLinuxマシンはネットワークIFを一つしか持っていなかったため、(SoftEtherVPNのドキュメントによれば)Linuxの制限によりローカルのネットワークのL2レイヤーのブリッジとして機能が不十分でした。これは、2つのネットワークIFを持つBridgeサーバを設置することで解決しました。
  • PV1とPV2を同じネットワークセグメントに設定すれば、リモートVPNアクセスの手法で実現できる(と思われる)が、ネットワークを再構築するのが面倒なのでルーティングする必要がありましたが、これはSoftEtherVPN serverの仮想L3 スイッチを使って解決しました。

#方法
##VPSにVPN serverを立てる
詳細はこちら

  • VPS2にVPNサーバをインストールする。
    • VPS2に仮想ハブ vHub3とvHub4を設定する。
    • 仮想ハブvHub3とvHub4にユーザを作成する。

##ネットワークIFを2つ持つVPN bridgeを設置する

  • PV1のDebian1にVPNブリッジをインストールする。
    • Debian1は、2つのネットワークインターフェイスを持っている必要があります(enp1s0とenp2s0)。
    • Local Bridge接続をenp2s0に対して行う。
    • 私はNetwork-managerをアンインストール(サーバには不向きです)して、以下の設定をしています。
      • enp2s0にIPを割り当てても良いが、プロトコルスタックの負荷を軽減するために0.0.0.0を割り当てる。
    • VPS2のvHub4にカスケード接続する。
/etc/network/interfaces
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

auto enp1s0 
iface enp1s0 inet static
        address 192.168.32.10
        netmask 255.255.255.0
        gateway 192.168.32.100

allow-hotplug enp2s0
iface enp2s0 inet static
        address 0.0.0.0
  • 同様にして、vHub3とDebian2をカスケード接続する。

  • VPS2のvHub4に接続して、PV1にリモートVPN接続できることを確認する。

  • VPS2のvHub4に接続して、PV2にリモートVPN接続できることを確認する。

  • 例えば、ネットワークIFを一つしか持たないUbuntu2をブリッジとしたVPS2のvHub1に接続しても、Ubuntu2にアクセスすることはできません(ただし、Ubuntu1やPV1のgatewayにはアクセスできるので、そからInternetにアクセスすることはできます)。また、L2スイッチにブリッジ接続が不十分のため、後述のL3スイッチを設定しても、L3スイッチに設定した仮想IFを認識できないようです(これがハマった理由)。

  • vHub4経由であれば、Debian1のenp1s0にアクセスできるので、PV1の全ネットワークにアクセスできます。

##仮想L3 switchを設定する

  • VPS2のVPN serverでL3 switchを設定します。
    • 仮想L3スイッチを作ります。
      • vHub3に仮想IFの192.168.1.200/255.255.255.0を設定
      • vHub4に仮想IFの192.168.32.200/255.255.255.0を設定
      • ルーティングは設定する必要はありません。これだけで、192.168.1.0/24と192.168.32.0/24のルーティングが設定されます。
      • PV1側からは、ping192.168.1.200の反応があることを確認します。
      • PV2側からは、ping192.168.32.200の反応があることを確認します。
      • その先のマシンで帰りの経路が設定されていないため、pingの反応はこの段階ではありません。

##ルーティングを設定する
PV1とPV2のネットワークセグメント間のルーティングはVPN serverの仮想L3スイッチで行いましたが、帰りの経路を各マシンでも設定する必要があります。

  • PV1側では、
$ sudo /sbin/route add -net 192.168.1.0/24 gw 192.168.32.200
  • PV2側では、
$ sudo /sbin/route add -net 192.168.32.0/24 gw 192.168.1.200

を設定する必要があります。
systemdで設定する方法は、こちらで紹介しました。

#その他

  • リモートVPNアクセス等で、もう一つのVPN経路を確保して設定するのが楽です。
  • 今回、使ったNICを2つ持つマシンは、こちら
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?