LoginSignup
6
2

More than 5 years have passed since last update.

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

Last updated at Posted at 2019-02-06

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

前提条件

  • 環境

    • 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つのネットワークに所属していること
  • ネットワーク構成
    Network.png

FortiGateの設定

VPNトンネルの作成

  1. 「VPN」→「IPsecウィザード」を選択し、ウィザードに従って設定していきます。
  2. 「名前」にはわかりやすい名前を設定し、「テンプレートタイプ」は「カスタム」を選択し、「次へ」をクリックします。 image.png
  3. 「リモートゲートウェイ」は「固定IPアドレス」を、「IPアドレス」にはDebian側のWANアドレスを入力します。
    「インターフェイス」は通常「wan1」だと思われますが、環境によって合わせてください。 image.png
  4. 「方式」は「事前共有鍵」を、「事前共有鍵」にはDebian側のipsec.secretsで設定した、キーを入力します。 image.png
  5. フェーズ1の設定を次のようにします。 image.png
  6. フェーズ2の設定を次のようにします。 image.png

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

インターフェイスの設定

  1. 「ネットワーク」→「インターフェイス」を選択します。
  2. 先ほど指定したインターフェイスの下に、指定した名前でトンネルインターフェイスが作成されているため、ダブルクリックします。 image.png 3.「IP」に「10.1.1.1」と入力し、必要に応じてPINGが通るようにします。 image.png

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

ルーティングの設定

  1. 「ネットワーク」→「スタティックルート」を選択します。
  2. 「新規作成」→「IPv4 Static Route」を選択します。
  3. 「宛先」に「10.99.4.0/24」と入力し、「インターフェイス」はVPNトンネルで指定した名前を選択します。 image.png 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

参考ページ

6
2
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
6
2