一部書きかけなので、気が向いたら追記しますが、とりあえず繋がるところまでは記載しました。
前提条件
-
環境
- 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トンネルの作成
- 「VPN」→「IPsecウィザード」を選択し、ウィザードに従って設定していきます。
- 「名前」にはわかりやすい名前を設定し、「テンプレートタイプ」は「カスタム」を選択し、「次へ」をクリックします。
- 「リモートゲートウェイ」は「固定IPアドレス」を、「IPアドレス」にはDebian側のWANアドレスを入力します。
「インターフェイス」は通常「wan1」だと思われますが、環境によって合わせてください。
- 「方式」は「事前共有鍵」を、「事前共有鍵」にはDebian側のipsec.secretsで設定した、キーを入力します。
- フェーズ1の設定を次のようにします。
- フェーズ2の設定を次のようにします。
ここまででVPNトンネルの作成は完了です。
インターフェイスの設定
- 「ネットワーク」→「インターフェイス」を選択します。
- 先ほど指定したインターフェイスの下に、指定した名前でトンネルインターフェイスが作成されているため、ダブルクリックします。
3.「IP」に「10.1.1.1」と入力し、必要に応じてPINGが通るようにします。
ここまででインターフェイスの設定は完了です。
ルーティングの設定
- 「ネットワーク」→「スタティックルート」を選択します。
- 「新規作成」→「IPv4 Static Route」を選択します。
- 「宛先」に「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