StrongswanでIPsecを実現
GNS3(その46)はこじつけである。Strongswanを実現するのに、たまたまGNS3環境が実現しやすい+Wiresharkのキャプチャが取得しやすいといった背景。
環境
左ルーター(Debian12.6-1)と右ルーター(Debian12.6-2)とで、StrongswanによるIPsecを確立させ、両端のPC1とPC2とが属するネットワークをIPsecの対象とする。IPアドレスは記載のとおり。
なお、上部にNATが見えるが、これはStrongswan(IPsec)実行には関連しない。DebianでのStrongswanインストール時にインターネット接続が必要だったため、利用したもの。
$ sudo apt install storongswan
ルーター(Debian)での設定
参考URL
- Using Strongswan to setup site to site IPsec VPN between GCP and Digital Ocean
- Setup a Site to Site IPsec VPN with Strongswan and PreShared Key Authentication
- ubuntu 20.04 LTS にて strongswan を使用したVPNを構築する(PSK)
/etc/sysctl.conf
net.ipv4.ip_forward=1
ルーターとして転送を有効化する。
/etc/ipsec.conf
Strongswanを使う上での最小設定を記載。
左ルーター(Debian12.6-1)
config setup
charondebug="ike 2, knl 2, cfg 2"
conn r1-to-r2
keyexchange=ikev2
type=tunnel
authby=secret
auto=start
left=172.16.1.1
leftid=172.16.1.1
leftsubnet=192.168.10.0/24
right=172.16.1.2
rightid=172.16.1.2
rightsubnet=192.168.20.0/24
- leftが自機、rightが対向機
- IPアドレスやIPsec対象ネットワークを指定
- leftid(172.16.1.1):後述するsecretsファイルで利用
右ルーター(Debian12.6-2)
config setup
charondebug="ike 2, knl 2, cfg 2"
conn r2-to-r1
keyexchange=ikev2
type=tunnel
authby=secret
auto=start
left=172.16.1.2
leftid=172.16.1.2
leftsubnet=192.168.20.0/24
right=172.16.1.1
rightid=172.16.1.1
rightsubnet=192.168.10.0/24
左ルーター説明参照。
/etc/ipsec.secrets
こちらも最小設定である。
左ルーター
172.16.1.1 172.16.1.2 : PSK "password"
前述したconfファイルのleftid, rightidを指定し、事前共有鍵は”password”。
右ルーター
172.16.1.2 172.16.1.1 : PSK "password"
こちらも左ルーター説明参照。
検証
IPsec対象となるネットワーク間の通信として、PC1(192.168.10.1)からPC2(192.168.20.1)へのpingを実施。
PC1> ping 192.168.20.1
84 bytes from 192.168.20.1 icmp_seq=1 ttl=62 time=38.590 ms
84 bytes from 192.168.20.1 icmp_seq=2 ttl=62 time=7.295 ms
84 bytes from 192.168.20.1 icmp_seq=3 ttl=62 time=13.027 ms
84 bytes from 192.168.20.1 icmp_seq=4 ttl=62 time=5.841 ms
84 bytes from 192.168.20.1 icmp_seq=5 ttl=62 time=4.669 ms
この時のIPsecステータスは下記となる。
$ sudo ipsec status
Security Associations (1 up, 0 connecting):
r1-to-r2[2]: ESTABLISHED 2 minutes ago, 172.16.1.1[172.16.1.1]...172.16.1.2[172.16.1.2]
r1-to-r2{2}: INSTALLED, TUNNEL, reqid 1, ESP SPIs: c7718a78_i c249e70c_o
r1-to-r2{2}: 192.168.10.0/24 === 192.168.20.0/24
他にも、”ipsec statusall”、”ip xfrm state”、”ip xfrm policy”などで、IPsec状況が把握できる。
ルーター間のWiresharkで取得したネットワークキャプチャデータも紹介。まずはIKE。
UDPポート500とポート4500(NAT-Traversal)とが混在している。理由は不明。
ping(ICMP)はESP内にある。
先ほどの”ipsec status”で見えたSPIである”c7718a78”と”c249e70c”とが確認できる。
なお、左ルーターのルーティングテーブル(下記)には、対向側のローカルネットワーク(192.168.2.0/24)の情報は存在しない。(右ルーターでも同様。)
$ ip route
172.16.1.0/24 dev ens4 proto kernel scope link src 172.16.1.1
192.168.10.0/24 dev ens5 proto kernel scope link src 192.168.10.254
IPsecの枠組みでルーティングしているということであろうか。
おまけ
GNS3には、各種OSに対応したApplianceというものが存在。
今回ルーターとして利用したDebianもここから導入。
x86_64プラットフォームであり、qemuで実行しているようだ。
$ uname -m
x86_64
EOF




