NAT環境下の拠点間接続時の同一ネットワーク(VXLAN over IPsec under NAT)
「その1」の続き。NAT環境下の拠点間接続時に同一ネットワークを実現する。調査及びトライ&エラーの結果、IPsec+NATトラバーサルを使わざるを得ないようであった。
ネットワーク
下記のようなネットワーク構成。中央にNATが存在し、左が内側、右が外側である。末端のPCどうしが同一ネットワークに属する。
設定
各種項目作成については、「その1」も参照されたし。特記事項がなければ、基本的に左側のForigateの設定を記載している。
ループバック(Loopback)
後述するVXLANの宛先として、Loopback IPアドレスを作成する。
ここでは、左側FortigateのLoopback IPアドレスとして”1.1.1.1”、右側FortigateのLoopback IPアドレスとして”1.1.1.2”を用いる。
VXLAN
CLIによる作成。VNIとして、10を用いる。これは、双方のFortigateで同じ値。
FG1 (vxlan) # show
config system vxlan
edit "vxlan"
set interface "Lo"
set vni 10
set remote-ip "1.1.1.2"
next
end
ソフトウェアスイッチ(Bridge)
ここは「その1」と同じ。作成したVXLANとInternal(ここではPort4および5)とをつなぐソフトウェアスイッチ(Bridge)を作成。
WAN
- 左側Fortigate:DHCPによるIPアドレス(10.1.1.x/24)
- 右側Fortigate:10.1.3.1/24(固定)
ネットワークインターフェース
最終的には下記となる(一部後述するVPN記述含む)。
左側Fortigate
右側Fortigate
IPsec VPN
IPsecトンネルにて、「カスタム」を選択して作成する。
左側Fortigate(NAT inside)
リモートゲートウェイのスタティックIPアドレスとして、対向peerのIPアドレス”10.1.3.1”を指定する。NATトラバーサルを有効化することも重要。
事前認証鍵を指定する。
オートネゴシエーション選択。
IPsec対象とするIPアドレスは指定しない。
右側Fortigate(NAT outside)
NAT外側では、対向PeerのIPアドレスが不定となる。リモートゲートウェイのダイアルアップユーザを選択する。NATトラバーサルを有効化することも同じ。
事前認証鍵指定は先ほどと同様。なお、ダイアルアップユーザの場合、オートネゴシエーション指定はできない。また、IPsec対象とするIPアドレスは指定しない。
Static Route
左側Fortigate(NAT inside)
対向PeerのIPアドレス(10.1.3.1)へのルートを作成。今回の最大のポイントと感じたのは、対向PeerのループバックIPアドレス(1.1.1.1)のインターフェースとして、VPNトンネル(vpn1)を指定することであった。
右側Fortigate(NAT outside)
同じく対向PeerのループバックIPアドレス(1.1.1.2)のインターフェースとして、VPNトンネル(vpn2)を指定。
Firewall
Fortigate内外(WAN-LAN間)を通信させるためのFirewall設定。VPNトンネル、ソフトウェアスイッチ、ループバックIPアドレス間通信を許可する。
右側Fortigateでは、上記vpn1がvpn2に置き換わるだけである。
検証
pingによる検証。パケットはESPとなってしまい、見ることができないので、Wiresharkで取得したデータは省略。左側Fortigateのルーティングテーブルは下記となる。
FG1 # get route info routing-table all
Codes: K - kernel, C - connected, S - static, R - RIP, B - BGP
O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2
i - IS-IS, L1 - IS-IS level-1, L2 - IS-IS level-2, ia - IS-IS inter area
V - BGP VPNv4
* - candidate default
Routing table for VRF=0
C 1.1.1.1/32 is directly connected, Lo
S 1.1.1.2/32 [10/0] via vpn1 tunnel 10.1.3.1, [1/0]
C 10.1.1.0/24 is directly connected, wan1
S 10.1.3.1/32 [10/0] via 10.1.1.1, wan1, [1/0]
C 192.168.10.0/24 is directly connected, internal
右側ortigateのルーティングテーブルは下記となる。
FG2 # get route info routing-table all
Codes: K - kernel, C - connected, S - static, R - RIP, B - BGP
O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2
i - IS-IS, L1 - IS-IS level-1, L2 - IS-IS level-2, ia - IS-IS inter area
V - BGP VPNv4
* - candidate default
Routing table for VRF=0
S* 0.0.0.0/0 [15/0] via vpn2 tunnel 10.1.3.2, [1/0]
S 1.1.1.1/32 [10/0] via vpn2 tunnel 10.1.3.2, [1/0]
C 1.1.1.2/32 is directly connected, Lo
C 10.1.3.0/24 is directly connected, wan1
C 192.168.30.0/24 is directly connected, internal
終わりに
VXLANはUDPパケットなので、理論的には、NAT環境下でIPsecなしでも実現できるのではあるが、このあたりはFortigateの仕様なのであろう。