このチュートリアルでは、 Ubuntu 16.04/18.04にOpenConnectVPNサーバーをインストールする方法を説明します。 。 OpenConnect VPNサーバー、別名 ocserv は、Cisco AnyConnnect VPNプロトコルのオープンソース実装であり、企業や大学で人気があります。 AnyConnectは、SSLベースのVPNプロトコルであり、個々のユーザーがリモートネットワークに接続できるようにします。
OpenConnect VPNサーバーの機能:
- 軽量で高速。私のテストでは、OpenConnectVPNを使用して4kでYouTubeを視聴できます。私の国ではYouTubeがブロックされています。
- CiscoAnyConnectクライアントと互換性があります
- パスワード認証と証明書認証をサポートします
- セットアップが簡単
他のVPNテクノロジーと比較して、エンドユーザーがOpenConnectVPNを使用するのは非常に簡単で便利であるという事実が特に気に入っています。コンピューターにDebianベースのLinuxディストリビューションをインストールして、Webサイトのブロックをすばやく解除したり、IPアドレスを非表示にしたりする場合は、OpenConnectクライアントをインストールし、2行のコマンドでサーバーに接続します。
sudo apt install openconnect sudo openconnect -b vpn.mydomain.com
gnutls-bin
ソフトウェアパッケージには、独自のCAおよびサーバー証明書を作成するためのツールが含まれていますが、Let’sEncrypt証明書を取得してインストールします。 Let’s Encrypt証明書を使用する利点は、VPNクライアントソフトウェアによって無料でセットアップが簡単で信頼できることです。
要件
このチュートリアルに従うには、ブロックされたWebサイトに自由にアクセスできるVPS(仮想プライベートサーバー)が必要です(国外またはインターネットフィルタリングシステム)。次の機能を備えたカマテラVPSをお勧めします:
- 30日間の無料トライアル。
- 月額4ドル(1 GB RAM)から
- 高性能KVMベースのVPS
- 米国、カナダ、英国、ドイツ、オランダ、香港、イスリアルを含む世界中の9つのデータセンター。
以下にリンクされているチュートリアルに従って、KamateraでLinuxVPSサーバーを作成してください。
- カマテラでLinuxVPSサーバーを作成する方法
Ubuntu 18.04を実行しているVPSを入手したら、以下の手順に従ってください。
OpenConnect VPNでHTTPSを有効にするには、ドメイン名も必要です。 NameCheapからドメイン名を登録したのは、価格が安く、whoisのプライバシー保護が一生無料になるからです。
ステップ1:Ubuntu 16.04/18.04にOpenConnectVPNサーバーをインストールする
Ubuntu 16.04/18.04サーバーにログインします。次に、apt
を使用します ocserv
をインストールするには パッケージ。16.04以降Ubuntuリポジトリに含まれています。
sudo apt install ocserv
インストールすると、OpenConnectVPNサーバーが自動的に起動します。次のコマンドでステータスを確認できます:
systemctl status ocserv
サンプル出力:
● ocserv.service - OpenConnect SSL VPN server Loaded: loaded (/lib/systemd/system/ocserv.service; enabled; vendor preset: enabled Active: active (running) since Thu 2017-11-30 05:45:07 UTC; 11s ago Docs: man:ocserv(8) Main PID: 19235 (ocserv-main) CGroup: /system.slice/ocserv.service ├─19235 ocserv-main └─19242 ocserv-secm
実行されていない場合は、次のコマンドで開始できます:
sudo systemctl start ocserv
デフォルトでは、OpenConnect VPNサーバーはTCPおよびUDPポート443でリッスンします。Webサーバーで使用されている場合、VPNサーバーを起動できません。 OpenConnectVPN構成ファイルでポートを変更する方法については後で説明します。
ステップ2:Let’s Encrypt Client(Certbot)をUbuntu 16.04/18.04サーバーにインストールする
次のコマンドを実行して、公式PPAから最新バージョンのcertbotをインストールします。 software-properties-common PPAからパッケージをインストールする場合は、が必要です。 Ubuntuサーバーにない可能性があります。
sudo apt install software-properties-common sudo add-apt-repository ppa:certbot/certbot sudo apt update sudo apt install certbot
バージョン番号を確認するには、
を実行しますcertbot --version
サンプル出力:
certbot 0.31.0
ステップ3:Let’sEncryptからTLS証明書を取得する
スタンドアロンプラグイン
Ubuntu 16.04 / 18.04サーバーで実行されているWebサーバーがなく、OpenConnect VPNサーバーでポート443を使用する場合は、スタンドアロンプラグインを使用してLet’sEncryptからTLS証明書を取得できます。次のコマンドを実行します。ドメイン名にAレコードを設定することを忘れないでください。
sudo certbot certonly --standalone --preferred-challenges http --agree-tos --email your-email-address -d vpn.example.com
説明:
-
certonly
:証明書を取得しますが、インストールしないでください。 --standalone
:スタンドアロンプラグインを使用して証明書を取得します-
--preferred-challenges http
:http-01チャレンジを実行して、ポート80を使用するドメインを検証します。デフォルトでは、スタンドアロンプラグインはポート443を使用するtls-sniチャレンジを実行します。ポート443はOpenConnect VPNサーバーですでに使用されているため、変更する必要があります。デフォルトの動作。 -
--agree-tos
:Let'sEncryptの利用規約に同意します。 --email
:メールアドレスはアカウントの登録と復旧に使用されます。-
-d
:ドメイン名を指定してください。
次のスクリーンショットからわかるように、証明書を正常に取得しました。
webrootプラグインの使用
Ubuntu 16.04 / 18.04サーバーにポート80と443でリッスンするWebサーバーがあり、OpenConnect VPNサーバーで別のポートを使用する場合は、webrootプラグインを使用して証明書を取得することをお勧めします。これは、webrootプラグインがで動作するためです。ほとんどすべてのWebサーバーであり、Webサーバーに証明書をインストールする必要はありません。
まず、vpn.example.comの仮想ホストを作成する必要があります。
Apache
Apacheを使用している場合は、
sudo nano /etc/apache2/sites-available/vpn.example.com.conf
そして、次の行をファイルに貼り付けます。
<VirtualHost *:80> ServerName vpn.example.com DocumentRoot /var/www/vpn.example.com </VirtualHost>
ファイルを保存して閉じます。次に、Webルートディレクトリを作成します。
sudo mkdir /var/www/vpn.example.com
www-data(Apacheユーザー)をWebルートの所有者として設定します。
sudo chown www-data:www-data /var/www/vpn.example.com -R
この仮想ホストを有効にします。
sudo a2ensite vpn.example.com
変更を有効にするためにApacheをリロードします。
sudo systemctl reload apache2
仮想ホストを作成して有効にしたら、次のコマンドを実行して、webrootプラグインを使用してLet’sEncrypt証明書を取得します。
sudo certbot certonly --webroot --agree-tos --email your-email-address -d vpn.example.com -w /var/www/vpn.example.com
Nginx
Nginxを使用している場合は、
sudo nano /etc/nginx/conf.d/vpn.example.com.conf
次の行をファイルに貼り付けます。
server { listen 80; server_name vpn.example.com; root /var/www/vpn.example.com/; location ~ /.well-known/acme-challenge { allow all; } }
ファイルを保存して閉じます。次に、Webルートディレクトリを作成します。
sudo mkdir -p /var/www/vpn.example.com
www-data(Nginxユーザー)をWebルートの所有者として設定します。
sudo chown www-data:www-data /var/www/vpn.example.com -R
変更を有効にするためにNginxをリロードします。
sudo systemctl reload nginx
仮想ホストを作成して有効にしたら、次のコマンドを実行して、webrootプラグインを使用してLet’sEncrypt証明書を取得します。
sudo certbot certonly --webroot --agree-tos --email your-email-address -d vpn.example.com -w /var/www/vpn.example.com
ステップ4:OpenConnectVPNサーバー構成ファイルの編集
ocserv構成ファイルを編集します。
sudo nano /etc/ocserv/ocserv.conf
まず、パスワード認証を構成します。デフォルトでは、PAM(Pluggable Authentication Modules)によるパスワード認証が有効になっています。これにより、Ubuntuシステムアカウントを使用してVPNクライアントからログインできます。この動作は、次の行をコメントアウトすることで無効にできます。
auth = "pam[gid-min=1000]"
ユーザーがシステムアカウントではなく別のVPNアカウントを使用してログインできるようにする場合は、次の行を追加して、パスワードファイルによるパスワード認証を有効にする必要があります。
auth = "plain[passwd=/etc/ocserv/ocpasswd]"
この構成ファイルの編集が終了したら、ocpasswd
の使用方法を確認します。 /etc/ocserv/ocpasswd
を生成するためのツール ファイル。ユーザー名とエンコードされたパスワードのリストが含まれています。
注 :Ocservはクライアント証明書認証をサポートしていますが、Let’sEncryptはクライアント証明書を発行しません。クライアント証明書を発行するには、独自のCAを設定する必要があります。
次に、ocservでTCPおよびUDPポート443を使用したくない場合は、次の2行を見つけて、ポート番号を変更します。それ以外の場合はそのままにしておきます。
tcp-port = 443 udp-port = 443
次に、次の2行を見つけます。それらを変更する必要があります。
server-cert = /etc/ssl/certs/ssl-cert-snakeoil.pem server-key = /etc/ssl/private/ssl-cert-snakeoil.key
デフォルト設定をLet’sEncryptサーバー証明書とサーバーキーファイルのパスに置き換えます。
server-cert = /etc/letsencrypt/live/vpn.example.com/fullchain.pem server-key = /etc/letsencrypt/live/vpn.example.com/privkey.pem
次に、クライアントの最大数を設定します。デフォルトは16です。無制限の場合はゼロに設定します。
max-clients = 16
ユーザーが同時にログインできるデバイスの数を設定します。デフォルトは2です。無制限の場合はゼロに設定します。
max-same-clients = 2
次に、次の行を見つけます。 false
を変更します true
に VPNのパフォーマンスを最適化できるMTUディスカバリーを有効にします。
try-mtu-discovery = false
その後、デフォルトのドメインをvpn.example.comに設定します。
default-domain = vpn.example.com
IPv4ネットワーク構成はデフォルトで以下のとおりです。ほとんどのホームルーターもIPv4ネットワーク範囲を192.168.1.0/24
に設定しているため、これにより問題が発生します。 。
ipv4-network = 192.168.1.0 ipv4-netmask = 255.255.255.0
別のプライベートIPアドレス範囲(10.10.10.0/24)を使用して、IPアドレスの衝突を回避できるため、ipv4-network
の値を変更します。 に
ipv4-network = 10.10.10.0
次の行のコメントを解除して、VPN経由ですべてのDNSクエリをトンネリングします。
tunnel-all-dns = true
DNSリゾルバアドレスを変更します。 GoogleのパブリックDNSサーバーを使用できます。
dns = 8.8.8.8
注 :特にVPNプロバイダーの場合は、同じサーバーで独自のDNSリゾルバーを実行することをお勧めします。同じサーバーで実行されているDNSリゾルバーがある場合は、DNSを次のように指定します
dns = 10.10.10.1
10.10.10.1は、VPNLAN内のOpenConnectVPNサーバーのIPアドレスです。これにより、VPNサーバーとDNSリゾルバー間のネットワーク遅延が排除されるため、クライアントのDNSルックアップが少し高速化されます。
次に、すべてのルートパラメータをコメントアウトします(次の4行の先頭に#記号を追加します)。これにより、サーバーがクライアントのデフォルトゲートウェイとして設定されます。
route = 10.10.10.0/255.255.255.0 route = 192.168.0.0/255.255.0.0 route = fef4:db8:1000:1001::/64 no-route = 192.168.5.0/255.255.255.0
ファイルを保存して閉じます。次に、VPNサーバーを再起動して、変更を有効にします。
sudo systemctl restart ocserv
ステップ5:DTLSハンドシェイクの失敗を修正する
Ubuntu16.04およびUbuntu18.04では、ocservデーモンocserv.socket
構成ファイルの「listen-host」値を尊重しません。これにより、クライアントがVPNサーバーに接続するときに次のエラーが発生します。
DTLS handshake failed: Resource temporarily unavailable, try again.
このエラーを修正するには、ocserv.serviceファイルを編集する必要があります。まず、元のファイルを/lib/systemd/system/
にコピーします。 /etc/systemd/system/
へのディレクトリ 新しいバージョンのocservパッケージで変更を上書きしたくないので、ディレクトリを編集してから編集します。 (systemdユニットファイルの詳細については、man systemd.unit
を実行してください。 。)
sudo cp /lib/systemd/system/ocserv.service /etc/systemd/system/ocserv.service sudo nano /etc/systemd/system/ocserv.service
次の2行をコメントアウトします。
Requires=ocserv.socket Also=ocserv.socket
ファイルを保存して閉じます。次にsystemdをリロードします
sudo systemctl daemon-reload
ocserv.socketを停止し、無効にします。
sudo systemctl stop ocserv.socket sudo systemctl disable ocserv.socket
ocservサービスを再起動します。
sudo systemctl restart ocserv.service
ocserv systemdサービスは、再起動に失敗してもメッセージを出力しないため、ステータスをチェックして、実際に実行されていることを確認する必要があります。
systemctl status ocserv
ステップ6:VPNアカウントの作成
次に、ocpasswdツールを使用してVPNアカウントを生成します。
sudo ocpasswd -c /etc/ocserv/ocpasswd username
ユーザーのパスワードを設定するように求められ、情報は/etc/ocserv/ocpasswd
に保存されます。 ファイル。パスワードをリセットするには、上記のコマンドをもう一度実行します。
ステップ7:IP転送を有効にする
VPNサーバーがVPNクライアントと外部との間でパケットをルーティングするには、IP転送を有効にする必要があります。 sysctl.conf
を編集します ファイル。
sudo nano /etc/sysctl.conf
このファイルの最後に次の行を追加します。
net.ipv4.ip_forward = 1
ファイルを保存して閉じます。次に、以下のコマンドで変更を適用します。 -p オプションは、 /etc/sysctl.confからsysctl設定をロードします ファイル。このコマンドは、システムを再起動しても変更を保持します。
sudo sysctl -p
ステップ8:IPマスカレード用にファイアウォールを構成する
サーバーがVPNクライアントの仮想ルーターになるように、サーバーファイアウォールでIPマスカレードを設定する必要があります。 iptablesファイアウォールのフロントエンドであるUFWを使用します。以下を使用してUbuntuにUFWをインストールします:
sudo apt install ufw
まず、SSHトラフィックを許可する必要があります。
sudo ufw allow 22/tcp
次に、サーバーのメインネットワークインターフェースの名前を見つけます。
ip addr
ご覧のとおり、ens3
という名前です。 私のUbuntuサーバーで。
IPマスカレードを設定するには、UFW設定ファイルにiptablesコマンドを追加する必要があります。
sudo nano /etc/ufw/before.rules
デフォルトでは、filter
にはいくつかのルールがあります テーブル。このファイルの最後に次の行を追加します。 ens3
を置き換えます 独自のネットワークインターフェイス名を使用します。
# NAT table rules *nat :POSTROUTING ACCEPT [0:0] -A POSTROUTING -s 10.10.10.0/24 -o ens3 -j MASQUERADE # End each table with the 'COMMIT' line or these rules won't be processed COMMIT
Nanoテキストエディタでは、Ctrl+W
を押すと、ファイルの最後に移動できます。 、次にCtrl+V
を押します 。
上記の行が追加されます( -A ) POSTROOUTINGの最後までのルール natのチェーン テーブル。仮想プライベートネットワークをインターネットにリンクします。また、ネットワークを外界から隠します。そのため、インターネットはVPNサーバーのIPしか見ることができませんが、ホームルーターがプライベートホームネットワークを隠すように、VPNクライアントのIPを見ることができません。
デフォルトでは、UFWはパケット転送を禁止しています。プライベートネットワークの転送を許可できます。 ufw-before-forward
を見つけます このファイルにチェーンを追加し、次の3行を追加します。これは、送信元IPまたは宛先IPが10.10.10.0/24
にある場合にパケット転送を受け入れます。 範囲。
# allow forwarding for trusted network -A ufw-before-forward -s 10.10.10.0/24 -j ACCEPT -A ufw-before-forward -d 10.10.10.0/24 -j ACCEPT
ファイルを保存して閉じます。次に、UFWを有効にします。
sudo ufw enable
以前にUFWを有効にしたことがある場合は、systemctlを使用してUFWを再起動できます。
sudo systemctl restart ufw
ここで、次のコマンドを使用して、NATテーブルのPOSTROUTINGチェーンにルールをリストするとします。
sudo iptables -t nat -L POSTROUTING
仮面舞踏会のルールを見ることができます。
ステップ9:ファイアウォールでポート443を開く
次のコマンドを実行して、TCPおよびUDPポート443を開きます。ocservに別のポートを構成した場合は、443を構成済みのポートに変更します。
sudo ufw allow 443/tcp sudo ufw allow 443/udp
これで、OpenConnectVPNサーバーはクライアント接続を受け入れる準備ができました。
VPNクライアントのDNSサーバーとして10.10.10.1を指定した場合は、VPNクライアントが次のUFWルールを使用してポート53に接続できるようにする必要があります。
sudo ufw insert 1 allow in from 10.10.10.0/24
また、VPNクライアントが以下のような再帰DNSクエリを送信できるように、BINDDNSサーバーの構成を編集する必要があります。
allow-recursion { 127.0.0.1; 10.10.10.0/24; };
Ubuntu 16.04/18.04デスクトップにOpenConnectVPNクライアントをインストールして使用する方法
次のコマンドを実行して、OpenConnectVPNコマンドラインクライアントをUbuntuデスクトップにインストールします。
sudo apt install openconnect
以下のようにコマンドラインからVPNに接続できます。 -b
フラグは、接続が確立された後、バックグラウンドで実行されます。
sudo openconnect -b vpn.example.com:port-number
VPNユーザー名とパスワードの入力を求められます。接続が正常に確立されると、次のメッセージが表示されます。
Got CONNECT response: HTTP/1.1 200 CONNECTED CSTP connected. DPD 90, Keepalive 32400 Connected tun0 as 192.168.1.139, using SSL Established DTLS connection (using GnuTLS). Ciphersuite (DTLS1.2)-(RSA)-(AES-256-GCM).
接続を停止するには、次のコマンドを実行します:
sudo pkill openconnect
クライアントを非対話的に実行するには、次の構文を使用します。
echo -n password | sudo openconnect -b vpn.example.com -u username --passwd-on-stdin
Network Managerを使用してVPN接続を管理する場合は、これらのパッケージもインストールする必要があります。
sudo apt install network-manager-openconnect network-manager-openconnect-gnome
VPNサーバーに正常に接続しても、パブリックIPアドレスが変更されない場合は、IP転送またはIPマスカレードが機能していないことが原因です。 iptablesコマンドにタイプミスがあったため、コンピューターがインターネットを閲覧できなくなったことがあります。
システム起動時の自動接続
OpenConnect VPNクライアントが起動時にサーバーに自動的に接続できるようにするために、systemdサービスユニットを作成できます。
sudo nano /etc/systemd/system/openconnect.service
次の行をファイルに追加します。赤いテキストを置き換えます。
[Unit] Description=OpenConnect VPN Client After=network-online.target systemd-resolved.service Wants=network-online.target [Service] Type=simple ExecStart=/bin/bash -c '/bin/echo -n password | /usr/sbin/openconnect vpn.example.com -u username --passwd-on-stdin' ExecStop=/bin/bash -c '/sbin/resolvconf -d tun0 && /usr/bin/pkill -SIGINT openconnect && /sbin/ip route flush 12.34.56.78' Restart=always RestartSec=2 [Install] WantedBy=multi-user.target
ファイルを保存して閉じます。次に、このサービスを有効にして、起動時に開始されるようにします。
sudo systemctl enable openconnect.service
ファイルの内容の説明:
-
After=network-online.target systemd-resolved.service
およびWants=network-online.target
ネットワークが起動した後にこのサービスを実行します。openconnect.service
が必要ですsystemd-resolved.service
の後に開始します これにより、OpenConnectによって設定されたDNSサーバーアドレスがsystemd-resolved.service
によって上書きされないようになります。 。 - 実際には、このサービスはネットワークが起動する前でも実行できます。
Restart=always
を追加します およびRestartSec=2
このサービスが失敗した場合、2秒後にこのサービスを再起動します。 - Systemdはパイプのリダイレクトを認識しないため、
ExecStart
ディレクティブでは、コマンドを一重引用符で囲み、Bashシェルで実行します。 - OpenConnect VPNクライアントはバックグラウンドで実行されるsystemdサービスとして実行されるため、
-b
を追加する必要はありません。openconnect
へのフラグ コマンド。 - ExecStop ディレクティブはVPN接続を停止するためのものです。まず、
resolvconf
を使用します DNSサーバー設定を元に戻すコマンド。 tun0 はTUNデバイスのデフォルト名であり、ip link
で確認できます。 指図。次に、pkill
を使用しますopenconenct
を停止するコマンド 処理する。最後に、ip route flush
を使用してLinuxカーネルルーティングテーブルを復元します。 指図。12.34.56.78
を置き換えます VPNサーバーのIPアドレスを使用します。
このSystemdサービスをすぐに開始するには、
を実行しますsudo systemctl start openconnect
このSystemdサービスを停止するには、
を実行しますsudo systemctl stop openconnect
自動-VPN接続が切断されたときに再起動
さまざまな理由でVPN接続が切断されることがありました。 VPNクライアントを自動的に再起動するには、rootユーザーのcrontabファイルを編集します。
sudo crontab -e
このファイルの最後に次の行を追加します。
* * * * * ping -c 10 10.10.10.1 > /dev/null || systemctl restart openconnect
このCronジョブは毎分実行され、VPNクライアントがVPNサーバーのプライベートIPアドレス(10.10.10.1)にpingできるかどうかを確認します。 pingが失敗した場合は、右側のコマンドが実行され、VPNクライアントが再起動されます。 ||
BashのOR演算子です。左側のコマンドがエラーを返した場合にのみ、右側のコマンドを実行します。
ファイルを保存して閉じます。
WindowsおよびMacOS用のOpenConnectGUIクライアント
OpenConnectGUIGithubページからダウンロードできます。
速度
OpenConnectVPNはかなり高速です。 YouTubeで4k動画を視聴するために使用できます。ご覧のとおり、接続速度は 63356 Kbpsです。 、これは 61 Mbit / sに変換されます 。
そして、これがspeedtest.netでのテスト結果です。
速度の最適化
OpenConnectは、デフォルトでTLS over UDPプロトコル(DTLS)を使用して高速化を実現しますが、UDPは信頼性の高い伝送を提供できません。 TCPはUDPよりも低速ですが、信頼性の高い伝送を提供できます。最適化のヒントの1つは、DTLSを無効にし、標準TLS(TCP経由)を使用してから、TCPBBRを有効にしてTCP速度を上げることです。
DTLSを無効にするには、ocserv構成ファイルの次の行をコメントアウトします(先頭に#記号を追加します)。
udp-port = 443
ファイルを保存して閉じます。次に、ocservサービスを再起動します。
sudo systemctl restart ocserv.service
TCP BBRを有効にするには、次のチュートリアルを確認してください。
- TCPBBRを有効にしてUbuntuネットワークのパフォーマンスを簡単に向上させる方法
私のテストでは、TCPBBRが有効になっている標準のTLSはDTLSの2倍高速です。
Let'sEncrypt証明書の自動更新
rootユーザーのcrontabファイルを編集します。
sudo crontab -e
ファイルの最後に次の行を追加します。 VPNサーバーが新しい証明書とキーファイルを取得するには、ocservサービスを再起動する必要があります。
@daily certbot renew --quiet && systemctl restart ocserv
トラブルシューティングのヒント
OpenVZ VPSを使用している場合は、VPSコントロールパネルでTUN仮想ネットワークデバイスが有効になっていることを確認してください。
問題が発生した場合は、OpenConnectVPNサーバーのログを確認してください。
sudo journalctl -xe -u ocserv.service
ポート443を別のポートに変更すると、中国のグレートファイアウォールがこのVPN接続をブロックすることがわかりました。
ocservが/etc/ocserv/ocserv.conf
を読み込めないと言った場合 ファイル、ocservを停止できます。
sudo systemctl stop ocserv
次に、デバッグを有効にしてフォアグラウンドで実行します。
sudo /usr/sbin/ocserv --foreground --pid-file /run/ocserv.pid --config /etc/ocserv/ocserv.conf --debug=10
次に、出力により、ocservが機能しない理由の手がかりが得られる可能性があります。
OpenConnectVPNサーバーとWebサーバーが同時にポート443を使用できるようにします
次の記事をお読みください:
- HAProxyを使用して同じボックスでOpenConnectVPNサーバーとApache/Nginxを実行する
ocservでTLS1.0とTLS1.1を無効にする方法
PCI評議会は2018年6月30日にTLS1.0を廃止し、メインストリームのWebブラウザは2020年にTLS1.0とTLS1.1を無効にする予定です。VPNサーバーでも同じことを行う必要があります。メインの構成ファイルを編集します。
sudo nano /etc/ocserv/ocserv.conf
次の行を見つけます:
tls-priorities = "NORMAL:%SERVER_PRECEDENCE:%COMPAT:-VERS-SSL3.0"
OpenConnectVPNサーバーでTLS1.0およびTLS1.1を無効にするには、-VERS-TLS1.0
を追加するだけです。 および-VERS-TLS1.1
行に。
tls-priorities = "NORMAL:%SERVER_PRECEDENCE:%COMPAT:-VERS-SSL3.0:-VERS-TLS1.0:-VERS-TLS1.1"
ファイルを保存して閉じます。次に、ocservを再起動します。
sudo systemctl restart ocserv
現在、ocservはTLS1.2のみを受け入れます。 ocservでのTLSパラメータの設定の詳細については、GnuTLS優先度文字列を参照してください。
OpenConnectVPNサーバーでTLS1.0がサポートされているかどうかを確認するには、次のコマンドを実行します。
openssl s_client -connect vpn.your-domain.com:443 -tls1
そしてTLS1.1を確認してください
openssl s_client -connect vpn.your-domain.com:443 -tls1_1
出力に次のメッセージが表示された場合は、TLSバージョンがサポートされていないことを意味します。
New, (NONE), Cipher is (NONE) Secure Renegotiation IS NOT supported
TLS 1.3を有効にしようとしましたが、Ubuntuのocservパッケージではまだサポートされていません。
ユーザーごとまたはグループごとの構成
Ocservでは、ユーザーごとおよびグループごとの構成が可能です。この機能を有効にするには、/etc/ocserv/ocserv.conf
の次の2行のコメントを解除します ファイル。
config-per-user = /etc/ocserv/config-per-user/ config-per-group = /etc/ocserv/config-per-group/
ファイルを保存して閉じます。次に、ユーザーごとおよびグループごとの構成ディレクトリを作成します。
sudo mkdir /etc/ocserv/config-per-user/ sudo mkdir /etc/ocserv/config-per-group/
次に、これら2つのディレクトリの下にファイルを作成できます。たとえば、user1
を作成します user1
のカスタム構成を許可するファイル 。
sudo nano /etc/ocserv/config-per-user/user1
group1
を作成することもできます group1
という名前のグループのカスタム構成を許可するファイル 。
sudo nano /etc/ocserv/config-per-group/group1
以下のようなものをファイルに追加できます。
route = 10.10.10.0/255.255.255.0
これは、user1
の後を意味します このVPNサーバーに接続し、10.10.10.0/24
へのトラフィックのみ ネットワークはVPNサーバー経由でルーティングされます。他のIPアドレスへのトラフィックは、元のゲートウェイを介してルーティングされます。このトリックを使用して、別のVPS(仮想プライベートサーバー)が通常のトラフィックを中断することなくこのVPNサーバーに接続できるようにするため、VPNサーバーのtunデバイス(vpns0)は常にオンになります。つまり、VPNサーバーには常にプライベートIPアドレス10.10.0.1。
ファイルを保存して閉じます。変更を有効にするには、ocservを再起動します。
sudo systemctl restart ocserv
仮想ホスティング
ocservに新しい仮想ホストを追加するには、最初に手順3の方法を使用して、新しい仮想ホストのTLS証明書を取得する必要があります。次に、ocserv構成ファイルを編集します。
sudo nano /etc/ocserv/ocserv.conf
このファイルの最後に移動します。 Nanoテキストエディタでは、Ctrl+W
を押すことができます 、次にCtrl+V
ファイルの最後にジャンプします。次の行を追加します。 vpn2.example.com
を置き換えます 2番目の仮想ホストのホスト名を使用します。
[vhost:vpn2.example.com] #Allow password authentication and certificate authentication enable-auth = "plain[passwd=/etc/ocserv/ocpasswd]" auth = "certificate" tcp-port = 443 #uncomment the two lines if ocserv runs behind HAProxy. #listen-host = 127.0.0.1 #listen-proxy-proto = true # SSL/TLS configuration ca-cert = /etc/ocserv/ssl/ca-cert.pem server-cert = /etc/letsencrypt/live/vpn2.example.com/fullchain.pem server-key = /etc/letsencrypt/live/vpn2.example.com/privkey.pem cert-user-oid = 0.9.2342.19200300.100.1.1 #Networking configuration. Use a different network range for this virtual host. device = vpns ipv4-network = 10.10.20.0 ipv4-netmask = 255.255.255.0 route = default dns = 8.8.8.8 tunnel-all-dns = true compression = true max-clients = 0 max-same-clients = 0 try-mtu-discovery = true idle-timeout=1200 mobile-idle-timeout=2400 config-per-user = /etc/ocserv/config-per-user/ config-per-group = /etc/ocserv/config-per-group/
ファイルを保存して閉じます。次に、ocservを再起動します。
sudo systemctl restart ocserv
UFW構成ファイルを編集します。
sudo nano /etc/ufw/before.rules
ufw-before-forward
を見つけます このファイルにチェーンを追加し、次の2行を追加します。これは、送信元IPまたは宛先IPが10.10.20.0/24
にある場合にパケット転送を受け入れます。 範囲。
-A ufw-before-forward -s 10.10.20.0/24 -j ACCEPT -A ufw-before-forward -d 10.10.20.0/24 -j ACCEPT
ファイルを保存して閉じます。次にUFWを再起動します。
sudo systemctl restart ufw
ocservデーモンは、仮想ホストでは一部のパラメーターが無視されることを通知する場合があることに注意してください。ただし、無視されたパラメータのいくつかが実際に必要であることがわかりました。たとえば、device = vpns
を削除した場合 仮想ホストからの回線では、仮想ホストへのVPN接続を確立するときに次のエラーが発生する可能性があります。
VPN service unavailable; reason: Server configuration error
また、VPNサーバーはログに次のエラーメッセージを生成します。
no networks are configured; rejecting client
注意 iOS上のAnyConnectVPNクライアントはTLSSNIをサポートしていないため、iOSユーザーはデフォルトの仮想ホストに接続します。
ocservの複数のインスタンスを実行する方法
1つのocservプロセスは、サーバー上の1つのTCPまたはUDPポートにのみバインドできます。 ocservが複数のTCPまたはUDPポートにバインドできるようにする場合は、複数のocservプロセスを実行する必要があります。とても簡単です。 /lib/systemd/system/ocserv.service
をコピーします 新しいファイルに。
sudo cp /lib/systemd/system/ocserv.service /etc/systemd/system/ocserv2.service
次に、新しいファイルを編集します。
sudo nano /etc/systemd/system/ocserv2.service
変更
/etc/ocserv/ocserv.conf
に
/etc/ocserv/ocserv2.conf
ファイルを保存して閉じます。次に、/etc/ocserv/ocserv2.conf
を編集できます ファイルを作成し、カスタム構成を追加します。完了したら、2番目のocservサービスを開始します。
sudo systemctl start ocserv2