RTX 810 と Openswan で site-to-site VPN

自宅から 10.0.0.3 とかで VPS にあるサーバにアクセスしたいし、逆に VPS から 192.168.10.8 とかで自宅のサーバにアクセスしたい。

環境

  • 自宅 (RTX 810)
    • グローバルIP 1.1.1.1
    • プライベートIP 192.168.10.1
    • サブネット 192.168.10.0/24
  • VPS (Openswan)
    • グローバルIP 2.2.2.2
    • プライベートIP 10.0.0.2
    • サブネット 10.0.0.0/16
  • pre-shared-key HOGEFUGA

自宅側の設定

Web UI から VPN 接続の設定→IPsecを使用したネットワーク型 LAN間接続VPN からだいたい設定できる。 最終的に以下のような設定になった。

...
ip route 10.0.0.0/16 gateway tunnel 1
...
tunnel select 1
 tunnel name vps
 ipsec tunnel 1
  ipsec sa policy 1 1 esp aes-cbc sha-hmac
  ipsec ike group 1 modp1024
  ipsec ike hash 1 sha
  ipsec ike keepalive use 1 off
  ipsec ike local address 1 192.168.10.1
  ipsec ike pre-shared-key 1 *
  ipsec ike remote address 1 1.1.1.1
  ipsec auto refresh 1 off
 ip tunnel tcp mss limit auto
 tunnel enable 1
...
ip filter 200085 pass * 192.168.10.1 udp * 500
ip filter 200086 pass * 192.168.10.1 esp * *
...

VPS 側の設定

Openswan

/etc/ipsec.conf

version 2.0

config setup
    dumpdir=/var/run/pluto/
    virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12,%v4:25.0.0.0/8,%v6:fd00::/8,%v6:fe80::/10
    oe=off
    protostack=auto

include /etc/ipsec.d/*.conf

/etc/ipsec.secrets

include /etc/ipsec.d/*.secrets

/etc/ipsec.d/rtx810.conf

conn rtx810
    auto=start
    type=tunnel
    authby=secret
    keyexchange=ike
    ike=aes128-sha1;modp1024
    phase2=esp
    phase2alg=aes128-sha1;modp1024
    pfs=no

    left=1.1.1.1
    leftid=1.1.1.1
    leftsourceip=10.0.0.200
    leftsubnet=10.0.0.2/16

    right=2.2.2.2
    rightid=192.168.10.1
    rightsubnet=192.168.10.1/24

/etc/ipsec.d/rtx810.secrets

1.1.1.1 192.168.10.1: PSK "HOGEFUGA"

/etc/sysctl.d/50-openswan.conf

net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.ip_forward = 1

これで ipsec verify に FAIL がなくなって起動するはず。

iptables

esp と udp 500 を開けておく。 あとは他のサーバから Openswan がいるサーバを通って通信させるために forward も許可しておく。

iptables -A INPUT -p udp -m multiport --dports 500 -j ACCEPT
iptables -A INPUT -p esp -j ACCEPT
iptables -A FORWARD -s 10.0.0.0/16 -d 192.168.10.0/24 -j ACCEPT
iptables -A FORWARD -s 192.168.10.0/24 -d 10.0.0.0/16 -j ACCEPT

これで VPN 接続を張れるはず。

route

Openswan を立てているサーバ以外から 192.168.10.0/24 にアクセスするときは 10.0.0.2 を通るようにする。 ip route add 192.168.10.0/24 via 10.0.0.2 dev ens4 とすればいいんだけど、この設定を永続化するために systemd-networkd では network ファイルに書いておく。

/etc/systemd/network/ens4.network

...

[Route]
Gateway=10.0.0.2
Destination=192.168.10.0/24