Edited at

FortiGateとStrongSwanでSite-Site IPsec VPNを張る

一部書きかけなので、気が向いたら追記しますが、とりあえず繋がるところまでは記載しました。


前提条件



  • 環境


    • FortiGate 90D(v5.6.7 build1653)

    • Debian GNU/Linux 9


      • strongSwan U5.5.1/K4.9.0-8-amd64






  • ネットワーク用件


    • FortiGate/Debian共にグローバルIPv4アドレスが付いていること

    • Debian側はWAN(Public)/LAN(Private)のイメージで2つのネットワークに所属していること



  • ネットワーク構成




FortiGateの設定


VPNトンネルの作成


  1. 「VPN」→「IPsecウィザード」を選択し、ウィザードに従って設定していきます。

  2. 「名前」にはわかりやすい名前を設定し、「テンプレートタイプ」は「カスタム」を選択し、「次へ」をクリックします。


  3. 「リモートゲートウェイ」は「固定IPアドレス」を、「IPアドレス」にはDebian側のWANアドレスを入力します。

    「インターフェイス」は通常「wan1」だと思われますが、環境によって合わせてください。


  4. 「方式」は「事前共有鍵」を、「事前共有鍵」にはDebian側のipsec.secretsで設定した、キーを入力します。


  5. フェーズ1の設定を次のようにします。


  6. フェーズ2の設定を次のようにします。


ここまででVPNトンネルの作成は完了です。


インターフェイスの設定


  1. 「ネットワーク」→「インターフェイス」を選択します。

  2. 先ほど指定したインターフェイスの下に、指定した名前でトンネルインターフェイスが作成されているため、ダブルクリックします。

    3.「IP」に「10.1.1.1」と入力し、必要に応じてPINGが通るようにします。


ここまででインターフェイスの設定は完了です。


ルーティングの設定


  1. 「ネットワーク」→「スタティックルート」を選択します。

  2. 「新規作成」→「IPv4 Static Route」を選択します。

  3. 「宛先」に「10.99.4.0/24」と入力し、「インターフェイス」はVPNトンネルで指定した名前を選択します。

    4.「OK」をクリックし、ルートを追加します。


ポリシーの設定

通常のファイヤーウォールポリシーを追加します。


Debianの設定


strongSwanのインストール

# apt install strongswan


/etc/ipsec.conf

conn %default

authby=secret
type=tunnel
auto=route
compress=no

conn FortiGate
left=AAA.AAA.AAA.AAA
leftsubnet=0.0.0.0/0
right=BBB.BBB.BBB.BBB
rightsubnet=0.0.0.0/0
leftfirewall=no
leftupdown=/etc/strongswan.d/updown.sh
keyexchange=ikev1
ike=aes256-sha256-ecp521
esp=aes256-sha256-ecp521
mark=42
# mark=42の42が後で出てくる、vtiのKeyと一致する必要あり



/etc/ipsec.secrets

BBB.BBB.BBB.BBB AAA.AAA.AAA.AAA : PSK "SuperSecretPSK"


ここまでの設定だと、なぜかDebian側からFortiGate側へのパケットが、トンネルデバイスではなく、

eth0などから抜けてしまうため、次の設定が必要です。


/etc/strongswan.d/charon.conf

# 下記のパラメタのみ書き換え

install_routes = no

トンネルが張れた時に呼ばれるスクリプト


/etc/strongswan.d/updown.sh

!/bin/bash

PLUTO_MARK_OUT_ARR=(${PLUTO_MARK_OUT//// })
PLUTO_MARK_IN_ARR=(${PLUTO_MARK_IN//// })

echo ${PLUTO_VERB}
echo ${PLUTO_CONNECTION}

VTI_INTERFACE="vti"${PLUTO_MARK_IN_ARR}

case "${PLUTO_VERB}" in
up-client)
ip tunnel add ${VTI_INTERFACE} mode vti local ${PLUTO_ME} remote ${PLUTO_PEER} key 42
ip link set ${VTI_INTERFACE} up
ip link set ${VTI_INTERFACE} up mtu 1350
ip addr add 10.1.1.2/32 dev ${VTI_INTERFACE}

ip route add 10.1.1.1/32 dev ${VTI_INTERFACE}
ip route add 192.168.0.0/16 dev ${VTI_INTERFACE}
;;

down-client)
$IP link del ${VTI_INTERFACE}
;;
esac


strongSwanを起動します。

# systemctl start strongswan


/etc/sysctl.conf

# 次の内容を追記

net.ipv4.ip_forward=1
net.ipv4.conf.all.accept_redirects = 0
net.ipv6.conf.all.accept_redirects = 0

sysctlの設定を反映

sysctl -p

状態の確認

# ipsec status

Routed Connections:
FortiGate{1}: ROUTED, TUNNEL, reqid 1
FortiGate{1}: 0.0.0.0/0 === 0.0.0.0/0
Security Associations (1 up, 0 connecting):
FortiGate[1]: ESTABLISHED 20 minutes ago, AAA.AAA.AAA.AAA[AAA.AAA.AAA.AAA]...BBB.BBB.BBB.BBB[BBB.BBB.BBB.BBB]
FortiGate{2}: INSTALLED, TUNNEL, reqid 1, ESP SPIs: c0bad4f9_i baf54487_o
FortiGate{2}: 0.0.0.0/0 === 0.0.0.0/0


参考ページ