OpenConnect

2020-05-11ubuntu

中国のGFWの対策に、OpenConnectを準備。OpenVPNと名前が紛らわしいが,CiscoのAnyConnectと互換性があり,業務に使われているのでブロックされにくいらしい。
今のところ快適に使えている。
Ubuntu 18.04のパッケージを利用するが,バグがあるようなので修正が必要だが,Ubuntu 20.04では改善しているようだ。インストールは,下記のサイトが詳しい。
https://www.linuxbabe.com/ubuntu/openconnect-vpn-server-ocserv-ubuntu-16-04-17-10-lets-encrypt
# lsof -i:443
最初はポートの変更ができないので,標準ポートの443を利用しているソフトをインストール前に止める。
止めておかないと,Dependency failedとなる。
# apt install ocserv
# vi /etc/ocserv/ocserv.conf
authを変更して,ユーザ認証とする。
auth = “plain[passwd=/etc/ocserv/ocpasswd]"
使用したいポートに変更。
udp-portをコメントにすると,TLS over UDP protocol (DTLS)を使わない。
tcp-port = 443
udp-port = 443
サーバの証明書は,V2Ray用にLet’s Encryptから取得したものをそのまま使う。
server-cert = /etc/v2ray/v2ray.crt
server-key = /etc/v2ray/v2ray.key
MTUを最適化可にする。
try-mtu-discovery = true
ドメイン名を設定する。
default-domain = domain.site
IPがローカルと重ならないように変更。
ipv4-network = 192.168.x.0
ipv4-netmask = 255.255.255.0
グーグルのDNSを使う。
dns = 8.8.8.8
route指定はすべてコメントにする。

ユーザとパスワードを設定する。
# ocpasswd -c /etc/ocserv/ocpasswd user_name

このままでは,DTLS handshake failedとなるので,サービスファイルを上書きして,ソケットを削除する。
# cp /lib/systemd/system/ocserv.service /etc/systemd/system/ocserv.service
# vi /etc/systemd/system/ocserv.service
下記の2行をコメントにする。
Requires=ocserv.socket
Also=ocserv.socket
# systemctl daemon-reload
# systemctl stop ocserv.socket
# systemctl disable ocserv.socket
# systemctl restart ocserv

IPフォワードを可に設定する
# vi /etc/sysctl.conf
net.ipv4.ip_forward = 1
# sysctl -p

ufwのフォワードのポリシーをACCEPTに変更する。
# vi /etc/default/ufw.conf
DEFAULT_FORWARD_POLICY="ACCEPT"
ufwにnatテーブルを追加する。
# cat >> /etc/ufw/before.rules
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -o eth0 -j MASQUERADE
COMMIT
^d
# ufw enable
# iptables -t nat -L POSTROUTING
# ufw allow ポート
# ufw status verbose

Androidのクライアントは、AnyconnectでもOpenConnectでも接続できる。
AnyConnectは、サーバにdomain.site:portを設定するだけだが、ユーザ名は記憶してくれるが、パスワードは毎回入力が必要なので面倒。
OpenConnectの方がコンパクトで、ログが見やすい。サーバアドレスにドメインとポートを入力するだけ。
いずれも、ステータスバーから切断できないのが少し不便。

Windowsのクライアントは、OpenConnect-Gui。V1.5.3を使用した。
https://github.com/openconnect/openconnect-gui
Gatewayにhttps://domain.site:port、Usernameのユーザ名を入力するだけ。
管理者として実行する必要があるのが面倒
ログを見ると、Error setting up DTLSとなっているが、使えるのでよし。

Windows XPだと、openconnect-gui V1.5.3はエラーになる。V1.2だと使えた。