Strongswanの設定

2018-05-05

Strongswanを設定してみた。
結論からいうと、スループットは、OpenVPNより少しよいが、動画視聴などでは劇的にはかわらない。
サーバーの設定をすれば、クライアント側の設定が不要で、Windows 7では、接続に追加ソフトが不要。

まずは、wikiのとおりに証明書を作成する。
https://wiki.archlinux.jp/index.php/StrongSwan
次に、ipsec.confとipsec.secretsを設定。
ipsec.confで、ikeを設定しなくとも、androidは接続できるが、windows 7は接続できない。
両者で、暗号の提案が違う。
/etc/ipsec.conf

config setup

uniquids=never
charondebug="cfg2, dmn 2, ike 2, net2″

conn %default

ikelifetime=24h
keylife=24h
kyexchange=ikev2
ike=aes128-sha1-modp4096,aes256-sha256-modp1024!
dpdaction=clear
dpdtimeout=300s
dpddelay=300s
compress=yes
rekey=no

conn IKEv2

left=%any
leftsubnet=0.0.0.0/0
leftauth=pubkey
leftcert=vpnHostCert.pem
leftfirewall=yes
right=%any
rightsourceip=192.168.10.0./24
rightauht=pubkey
rigthcert=ClientCert.pem
rightfirwall=yes
auto=add

/etc/ipsec.secrets

: RSA vpnHostKey.pem

/etc/strongswan.d/charon-logging.confを編集して、ログファイルを設定。

iptablesまたはufwで、500と4500のポート、espのacceptとnatを設定する。下記の追加も必要。
-t nat -A POSTROUTING -o eth0 -m policy –dir out –pol ipsec -j ACCEPT
右記のサイトが参考になる。http://www.nosense.jp/iptables-ipsec/

systemctl start strongswan-starter
systemctl enable strongswan-starter
以上でサーバは終了。

androidは、strongSwan VPN Clientをインストールし、IKEv2 Certificateを選び、Clinet.p12を読み込むと設定終了。

windows 7では証明書のインストールが必要なので、C:\Windows\System32\mmc.exeを管理者として起動。
ファイル、スナップインの追加と削除、証明書を追加、コンピュータアカウントを選択。
Clinet.p12を個人に証明書を追加。ルート証明書を信頼されたルート証明機関に移動。
あとは、ネットワークと共有センターでVPNを作成し、セキュリティで、IKEv2を選択し、認証でコンピュータの証明書を使うを選ぶ。
WindowsでVPNに接続できても、ゲートウェイアドレスが設定されないために使えないことがある。"リモートネットワークでデフォルトゲートウェイを使う"のチェックが抜けているためであった。
中国からgoogleサイトにアクセスするためには、DNSの追加が必要。rightdns=8.8.8.8,8.8.4.4

サーバの認証だけでよい場合は、標準ディレクトリからlet’s encryptの証明書にリンクを貼る。認証局証明書、サーバ証明書、サーバ秘密鍵の3つだけが必要で、サーバ証明書に認証局証明書を加えたfullchain.pemは不要。この方法だと、クライアントにルート認証局証明書を追加する必要がない。
ipsec.confで、left=%anyとleftsubnet=0.0.0.0/0は不要。leftid=domainも指定いなければcertからセットされる。
# ln -s /etc/letsenrypt/live/domain/chain.pem /etc/ipsec.d/cacerts
# ln -s /etc/letsenrypt/live/domain/cert.pem /etc/ipsec.d/certs/cert.pem
# ln -s /etc/letsenrypt/live/domain/privkey.pem /etc/ipsec.d/private/privkey.pem

# ipsec statusall
# ipsec status
# ip xfrm status

なぜか、突然、strongswanが接続できなくなった。 no IKE config found for xx.xx.xx…xx.xx.xx.xx, sending NO_PROPOSAL_CHOSEN [IKE] received NO_PROPOSAL_CHOSEN notify error 暗号形式が一致しない?? 以下のサイトによると、5.8.0からユニットが変更されたので、/etc/ipsec.confがなんと読み込まれないらしい。 https://chitoku.jp/computers/strongswan-swanctl-migration とりあえず、Legacy unitに変更して解決。
# systemctl stop strongswan
# systemctl disable strongswan
# systemctl start strongswan-starter
# systemctl enable strongswan-starter 今回、ログの勉強になった。
# journalctl -u strongswan -e

ubuntu 20.04では、strongswanのパッケージがあるのでインストール。
# apt install strongswan strongswan-pki libcharon-extra-plugins libstrongswan-extra-plugins
net/ipv4/conf/all/send_redirects=0
net/ipv4/ip_no_pmtu_disc=1

pki –gen –type rsa –size 4096 –outform pem > /etc/ipsec.d/private/server-key.pem
証明書は、/etc/ipsec.d/certs, privateの標準の場所でないとopening failed 'path’ Permission deniedとなる。

keyをrsaではなくeccにしたときは、/etc/ipsec.secretsはRSAをECDSAにしないと、building CRED_PRIVATE_KEY – RSA failedとなる。

acme.shで証明書をセットする。ca.cerのコピーを忘れると、no issuer certificate foundのエラーとなる。
# ./acme.sh -i -d domain.work –fullchain-file /etc/ipsec.d/certs/domain.crt –key-file /etc/ipsec.d/private/domain.key –ca-file /etc/ipsec.d/cacerts/ca.cer
オプションのfullchain-fileとfullchainpathは同じ。
domain/domain.confにセットされる。