体育会系NetworkEngineerの備忘録

ネットワーク機器(Cisco、Juniper、FortiGate、BIG-IPなど)の設定方法や検証レポートを紹介します。プライベートの内容も少しあります。

【FortiGate】IPSec-VPN設定(with NAT)~Site-to-Site編~

FortiGateでIPSec-VPNの設定をして且つローカルアドレスのSorce IPをNAT変換してみたので設定方法を記載します。
※検証で使用した機器はFortiWiFi90D(Ver:5.2.3)です。
構成は下図の通り。

f:id:fantasista7s:20160223093618p:plain

※各InterfaceのIPアドレス等は設定済みという前提
VPN設定(Center側)
 VPNIPSec>ウィザード
 任意の名前を記入し「Site-to-Site」を選択して「次へ」
f:id:fantasista7s:20160223094853j:plain
 下図4項目を記入し「次へ」
 リモートゲートウェイ:トンネルの対向のIPアドレス
 出力インターフェース:トンネルを張る自Interface
f:id:fantasista7s:20160223100318j:plain
 下図3項目を記入し「次へ」
 ローカルインターフェース:自LAN側Interface
 ローカルサブネット:自LAN側NW
 リモートサブネット:対向の宛先NW
f:id:fantasista7s:20160223100753j:plain

VPN設定(Branch側)
 VPNIPSec>ウィザード
 任意の名前を記入し「Site-to-Site」を選択して「次へ」
f:id:fantasista7s:20160223101125j:plain
 下図4項目を記入し「次へ」
 リモートゲートウェイ:トンネルの対向のIPアドレス
 出力インターフェース:トンネルを張る自Interface
f:id:fantasista7s:20160223101157j:plain
 下図3項目を記入し「次へ」
 ローカルインターフェース:自LAN側Interface
 ローカルサブネット:自LAN側NW
 リモートサブネット:対向の宛先NW
f:id:fantasista7s:20160223101204j:plain

③疎通確認
 LAN-to-LANでPINGを実施することでInterest Packetが送出されIPSecのステータスがアップします。
 VPN>モニタ>IPSecモニタ
f:id:fantasista7s:20160223101720j:plain

ローカルアドレスのSorce IPをNAT変換
 ポリシー&オブジェクト>ポリシー>IPv4
 構成図のようにNAT変換させる場合、Center側のFortiGateでトンネルInterfaceからLANへ通過するポリシーに対してNAT設定する
f:id:fantasista7s:20160223102148j:plain
f:id:fantasista7s:20160223102616j:plain
この構成であればBranchからCenterへアクセスする通信はIPSecトンネルを通り、且つSorceIPがNAT変換される。

NAT変換されたことを確認するには方法がいくつかありますが代表的な2つを紹介します。
■セッションテーブルの確認

FortiGate # diagnose sys session filter src 192.168.2.1

FortiGate # diagnose sys session list 

session info: proto=1 proto_state=00 duration=2 expire=57 timeout=0 flags=00000000 sockflag=00000000 sockport=0 av_idx=0 use=3
origin-shaper=
reply-shaper=
per_ip_shaper=
ha_id=0 policy_dir=0 tunnel=/Center
state=may_dirty npu 
statistic(bytes/packets/allow_err): org=500/5/1 reply=500/5/1 tuples=2
orgin->sink: org pre->post, reply pre->post dev=69->63/63->69 gwy=192.168.1.1/192.168.2.1
hook=post dir=org act=snat 192.168.2.1:15->192.168.1.1:8(10.1.1.1:62464)
hook=pre dir=reply act=dnat 192.168.1.1:62464->10.1.1.1:0(192.168.2.1:15)
misc=0 policy_id=3 auth_info=0 chk_client_info=0 vd=0
serial=0000036e tos=ff/ff ips_view=0 app_list=0 app=0
dd_type=0 dd_mode=0
npu_state=00000000
npu info: flag=0x00/0x82, offload=0/0, ips_offload=0/0, epid=0/0, ipid=0/0, vlan=0/0
total session 1

FortiGate # diagnose sys session filter clear

■パケット処理フローの確認

FortiGate # diagnose debug flow show console enable
show trace messages on console

FortiGate # diagnose debug flow filter proto 1  ←ICMPの場合、プロトコル番号は「1」

FortiGate # diagnose debug flow trace start 2  ←出力させる項目数(指定なしの場合は1項目表示)

id=20085 trace_id=1 func=print_pkt_detail line=4378 msg="vd-root received a packet(proto=1, 192.168.2.1:18->192.1"
id=20085 trace_id=1 func=init_ip_session_common line=4527 msg="allocate a new session-000003e7"
id=20085 trace_id=1 func=vf_ip4_route_input line=1596 msg="find a route: flags=00000000 gw-192.168.1.1 via lan"
id=20085 trace_id=1 func=fw_forward_handler line=670 msg="Allowed by Policy-3: SNAT"
id=20085 trace_id=1 func=__ip_session_run_tuple line=2523 msg="SNAT 192.168.2.1->10.1.1.1:60418"
id=20085 trace_id=1 func=__if_queue_push_xmit line=366 msg="send out via dev-internal, dst-mac-00:1b:d3:8a:7e:e2"
id=20085 trace_id=2 func=print_pkt_detail line=4378 msg="vd-root received a packet(proto=1, 192.168.1.1:60418->10.1.1.1:0) from la"
id=20085 trace_id=2 func=resolve_ip_tuple_fast line=4437 msg="Find an existing session, id-000003e7, reply direction"
id=20085 trace_id=2 func=__ip_session_run_tuple line=2537 msg="DNAT 10.1.1.1:0->192.168.2.1:18"
id=20085 trace_id=2 func=vf_ip4_route_input line=1596 msg="find a route: flags=00000000 gw-192.168.2.1 via Center"
id=20085 trace_id=2 func=ipsecdev_hard_start_xmit line=121 msg="enter IPsec interface-Center"
id=20085 trace_id=2 func=ipsec_output_finish line=232 msg="send to 172.16.1.2 via intf-wan1"
id=20085 trace_id=2 func=esp_output4 line=889 msg="encrypting, and send to 172.16.1.2 with source 172.16.1.1"
~[省略]~

FortiGate # diagnose debug flow filter clear