自宅-VPS間でIPsec (strongswan)

自宅(動的IPアドレス)とVPS(固定IPアドレス)の間で、IPsec トンネルを常時接続してみる。これには、自宅のIPアドレスが変わっても、VPS 経由で自宅に入れるというメリットがある。

ネットワーク図

VPS の OS: CentOS 7.5
自宅サーバのOS: Raspbian 9.4 (Raspberry Pi)
IPsec ソフトウェア: strongswan

1. VPS 側

strongswan をインストールする。
[user@myvps1 ~]$ sudo yum install epel-release
[user@myvps1 ~]$ sudo yum install strongswan

通過パケットを転送できるように、カーネルパラメータを変更する。
[user@myvps1 ~]$ sudo vi /etc/sysctl.conf

net.ipv4.ip_forward=1  #追記する

[user@myvps1 ~]$ sudo sysctl -p /etc/sysctl.conf

ipsec.conf を編集する。
[user@myvps1 ~]$ sudo vi /etc/strongswan/ipsec.conf

conn myhome-to-vps
        authby=secret
        auto=add
        closeaction=clear
        dpdaction=clear
        left=203.0.113.180
        leftsubnet=203.0.113.180/32
        right=%any		#相手側IPアドレスは不明なので%anyにしておく
        rightsubnet=192.168.100.0/24

事前共有鍵を設定する。
[user@myvps1 ~]$ sudo vi /etc/strongswan/ipsec.secrets

: PSK "mypresharedkey"

サービスを起動する。
[user@myvps1 ~]$ sudo systemctl enable strongswan
[user@myvps1 ~]$ sudo systemctl start strongswan

2. 自宅側

strongswan をインストールする。
user@myserver1:~$ sudo apt install strongswan

通過パケットを転送できるように、カーネルパラメータを変更する。
user@myserver1:~$ sudo vi /etc/sysctl.conf

net.ipv4.ip_forward=1  #28行目のコメントを外す

user@myserver1:~$ sudo sysctl -p /etc/sysctl.conf

ipsec.conf を編集する。
user@myserver1:~$ sudo vi /etc/ipsec.conf

conn myhome-to-vps
        authby=secret
        auto=start		#自動的にこちらから接続する
        closeaction=restart
        dpdaction=restart
        left=192.168.100.240
        leftsubnet=192.168.100.0/24
        right=203.0.113.180
        rightsubnet=203.0.113.180/32

VPS 側と同じ事前共有鍵を設定する。
user@myserver1:~$ sudo vi /etc/ipsec.secrets

: PSK "mypresharedkey"

サービスを起動する。
user@myserver1:~$ sudo systemctl enable strongswan
user@myserver1:~$ sudo systemctl start strongswan

以上の設定で接続できる。NAPT を越えることが自動的に検出されて、IPsec パケットは NAT-Traversal でカプセル化される。iptables で UDP 4500 が閉じられている場合は、ACCEPT するように変更しておく。