最近では、VPN 技術が普及しつつあります。一般ユーザーは、VPN を使用して安全にインターネットにアクセスします。また、ローカルでブロックされている Web サイトやサービスを回避し、外部の悪意のある行為から保護するのにも役立ちます。VPN サーバーに接続すると、コンピューターとサーバーの間に外部からアクセスできない安全なトンネルが存在するため、VPN サーバーがインターネット アクセス ポイントになります。無料のものも有料のものも含め、VPN サービスはたくさんありますが、何らかの理由でうまく機能しない場合は、いつでも独自の VPN サーバーを構成できます。
独自の VPN を運用するには、VPS サーバーをレンタルする必要があります。VPN 接続を作成できるソフトウェアはいくつかあり、それぞれサポートされているオペレーティングシステムや使用されるアルゴリズムが異なります。ここでは、VPN サーバーをセットアップするための 2 つの独立したアプローチを見ていきます。1 つ目は、すでに時代遅れで安全ではないと考えられている PPTP プロトコルに基づいたものですが、設定は非常に簡単です。もう 1 つは、最新の安全なソフトウェアである OpenVPN を使用しますが、サードパーティのクライアント アプリケーションのインストールと、より詳細なセットアップ プロセスが必要です。
テスト環境では、Ubuntu Server 18.04 を搭載した仮想サーバーを使用します。ファイアウォールの設定については別の記事で説明するため、サーバー上ではファイアウォールをオフにします。Windows 10 でのセットアップ プロセスについて説明します。
準備
どの VPN サーバーを選択しても、インターネット アクセスはオペレーティング システムの統合手段によって設定されます。外部サービス インターフェイスを介してインターネット アクセスを開くには、インターフェイス間のパケット転送を許可し、ネットワーク アドレス変換を構成する必要があります。
パケット転送を有効にするには、 「/etc/sysctl.conf」ファイルを開き、「net.ipv4.ip_forward」パラメータの値を1に変更します。
コンピュータを再起動せずに変更を適用するには、次のコマンドを実行します。
sudo sysctl -p /etc/sysctl.conf
ネットワークアドレス変換はiptablesを使用して設定します。まず、 「ip link show」コマンドを実行して外部ネットワークインターフェースの名前を確認してください。次のステップで必要になります。ここでは「ens3」という名前です。
すべてのローカル ネットワーク ノードの外部インターフェイスでネットワーク アドレス変換を有効にします。
sudo iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE
サーバーのインターフェースの実際の名前を指定する必要があることに注意してください。これは、当社のものとは異なる場合があります。
デフォルトでは、iptablesによって作成されたすべてのルールは、サーバーの再起動後にリセットされます。これを防ぐには、「iptables-persistent」ユーティリティを使用してください。以下のパッケージをインストールしてください。
sudo apt install iptables-persistent
インストールプロセス中に、現在のiptablesルールを保存するかどうかを尋ねる設定ウィンドウが表示されます。ルールは既に定義されているため、確認して「はい」を2回クリックしてください。これで、サーバー再起動後にルールが自動的に適用されます。
PPTPサーバー
サーバー構成
パケットをインストールします:
sudo apt install pptpd
インストールが完了したら、任意のテキストエディタで「/etc/pptpd.conf」ファイルを開き、以下のように編集してください。
option /etc/ppp/pptpd-options #path to the settings file
logwtmp #client connections logging mechanism
connections 100 #number of simultaneous connections
localip 172.16.0.1 #the address that will serve as a client gateway
remoteip 172.16.0.2-200 #range of addresses
その後、「/etc/ppp/pptpd-options」ファイルを編集してください。ほとんどのパラメータはデフォルトで設定されています。
#name of the service for new client records
name pptpd
#restrict obsolete authentication methods
refuse-pap
refuse-chap
refuse-mschap
#allow a more secure authentication method
require-mschap-v2
#enable encryption
require-mppe-128
#specify dns servers for clients (use any available servers)
ms-dns 8.8.8.8
ms-dns 8.8.4.4
proxyarp
nodefaultroute
lock
nobsdcomp
novj
novjccomp
nologfd
次の段階では、クライアント接続用のレコードを作成する必要があります。たとえば、パスワード「1」を持つユーザー「vpnuser」を追加し、そのユーザーに動的アドレス指定を許可したいとします。 「/etc/ppp/chap-secrets」ファイルを開き、ファイルの末尾にユーザーのパラメータを含む次の行を追加します。
vpnuser pptpd 1 *
「pptpd」の値は、 「pptpd-options」ファイルで指定したサービス名です。 「*」の代わりに固定IPアドレスを指定することもできます。結果として、「chap-secrets」ファイルは次のようになります。
設定を適用するには、pptpdサービスをリセットし、自動読み込みに追加してください。
sudo systemctl restart pptpd
sudo systemctl enable pptpd
サーバーの設定が完了しました。
クライアント構成
「スタート」 → 「設定」 → 「ネットワークとインターネット」 → 「VPN」を開き、 「VPN接続を追加する」をクリックします。
開いたウィンドウに接続パラメータを入力し、「保存」をクリックしてください。
- VPNプロバイダー:「Windows(組み込み)」
- 接続名: 「vpn_connect」(任意の名前を選択できます)
- サーバー名またはアドレス: (サーバーの外部 IP アドレスを指定)
- VPNタイプ:「自動」
- サインイン情報の種類: 「ユーザー名とパスワード」
- ユーザー名: ユーザ (サーバー上の「chap-secrets」ファイルに指定された名前)
- パスワード: 1 (「chap-secrets」ファイルの場合)
パラメータを保存すると、ウィンドウに新しいVPN接続が表示されます。接続を左クリックして「接続」を選択してください。接続が成功すると、「接続済み」と表示されます。
オプションには、クライアントとサーバーの内部アドレスが表示されます。「宛先アドレス」フィールドには、外部サーバーのアドレスが表示されます。
接続されると、サーバーの内部IPアドレス(この場合は172.16.0.1)が、すべての送信パケットのデフォルトゲートウェイになります。
任意のオンライン サービスを使用すると、コンピューターの外部 IP アドレスが VPN サーバーの IP アドレスと同じになっていることを確認できます。
OpenVPNサーバー
サーバー構成
今後の設定ではルート アクセスが必要になるため、現在のユーザーの権限レベルを上げましょう。
sudo -s
必要なパッケージをすべてインストールしてください。暗号化キーを管理するために「Easy-RSA」パッケージが必要になります。
apt install openvpn easy-rsa iptables-persistent
UDP プロトコル経由でポート 1194 への着信接続を許可し、iptables ルールを適用します。
sudo iptables -I INPUT -p udp --dport 1194 -j ACCEPT
sudo netfilter-persistent save
「Easy-RSA」パッケージからコピーしたファイルを含むディレクトリを作成し、そこに移動します。
make-cadir ~/openvpn
cd ~/openvpn
公開鍵インフラストラクチャ (PKI) を生成します。
./easyrsa init-pki
証明機関 (CA) ルート証明書を生成します。
./easyrsa build-ca
作成プロセス中に、パスワードの設定と記憶を求められます。また、質問に答え、鍵の所有者に関する情報を入力する必要があります。角括弧で囲まれたデフォルト値のままでも構いません。入力を確定するには、「Enter」キーを押してください。
秘密鍵と証明書リクエストを生成します。引数として任意の名前を指定します。今回の場合は「vpn-server」です。
./easyrsa gen-req vpn-server nopass
共通名の値はデフォルトのままにしておきます。
生成されたサーバー証明書要求に署名します。
./easyrsa sign-req server vpn-server
この手順では、「はい」と答えて署名を確認し、ルート証明書の生成中に作成されたパスワードを入力します。
Diffie-Hellmanパラメータを生成します。これらのパラメータは、サーバーとクライアント間の安全な鍵交換に使用されます。
./easyrsa gen-dh
必要なファイルはすべて生成されました。OpenVPNの作業ディレクトリに「keys」フォルダを作成してキーを保存し、作成したファイルをそこにコピーしましょう。
mkdir /etc/openvpn/keys
sudo cp pki/ca.crt pki/issued/vpn-server.crt pki/private/vpn-server.key pki/dh.pem /etc/openvpn/keys
NATを設定するには iptables ルール。名前の付いたファイルを作成します nat 編集用に開いて /etc/openvpn/ ディレクトリにあります。
#!/bin/sh
# Reset firewall settings
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
# (eth0 in our case, may vary)
iptables -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
# (eth0 in our case, may vary)
iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT
# Allow OpenVPN connections (eth0 in our case, may vary)
iptables -A INPUT -i eth0 -p udp --dport 1194 -j ACCEPT
iptables -A INPUT -i tun0 -j ACCEPT
# (eth0 in our case, may vary):
iptables -A FORWARD -i eth0 -o tun0 -j ACCEPT
iptables -A FORWARD -i tun0 -o eth0 -j ACCEPT
# (eth0 in our case, may vary)
iptables -A FORWARD -i eth0 -o tun0 -m state --state ESTABLISHED,RELATED -j ACCEPT
# Enable masquerading for the local network (eth0 in our case, may vary)
iptables -t nat -A POSTROUTING -o eth0 -s 10.8.0.0/24 -j MASQUERADE
# Deny incoming connections from outside
iptables -A INPUT -i eth0 -j DROP
# Deny transit traffic from outside (eth0 in our case, may vary)
iptables -A FORWARD -i eth0 -o tun0 -j DROP
sudo netfilter-persistent save
ファイルを保存し、実行可能にします。
sudo chmod 755 /etc/openvpn/nat
サーバー構成テンプレートをコピーします。
cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf /etc/openvpn/
ファイル「/etc/openvpn/server.conf」を開いて編集し、以下の行が含まれていることを確認し、必要に応じて編集してください。
#Port, protocol, and interface
port 1194
proto udp
dev tun
#Path to the encryption keys
ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/vpn-server.crt
key /etc/openvpn/keys/vpn-server.key
dh /etc/openvpn/keys/dh.pem
#SHA256 Hashing Algorithm
auth SHA256
#Switching off additional encryption
#tls-auth ta.key 0
#Network parameters
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist /var/log/openvpn/ipp.txt
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
#Ping every 10 seconds to check the connection.
keepalive 10 120
#Set up AES-256 encryption for the tunnel.
cipher AES-256-GCM
#Demoting the service OpenVPN after launch
user nobody
group nogroup
#Switching on parameters saving after reboot
persist-key
persist-tun
#Set log verbosity
verb 3
#Redirecting logs
log-append /var/log/openvpn/openvpn.log
#Script the rule installation launch.
up /etc/openvpn/nat
サーバー上でトラフィック転送を有効にします。
sudo sysctl -w net.ipv4.ip_forward=1
echo 'net.ipv4.ip_forward=1' | sudo tee -a /etc/sysctl.conf
設定を適用するには OpenVPN を起動します。
systemctl restart openvpn@server
サーバーの設定が完了しました。
クライアント構成
OpenVPNの公式サイト「https://openvpn.net 」にアクセスし、 「コミュニティ」セクションに移動してください。
下にスクロールして、お使いのオペレーティングシステムのバージョンに合ったインストーラーをダウンロードしてください。今回の場合はWindows 11 ARM64です。
すべてのパラメータをデフォルトのままにしてアプリケーションをインストールします。
次の段階では、サーバー上で次のファイルを準備し、クライアント コンピューターに転送する必要があります。
- 公開鍵と秘密鍵。
- 認証センターキーのコピー。
- 設定ファイルテンプレート。
サーバーに接続し、権限を昇格して、作成したディレクトリに移動します "~/openvpn".
sudo -s
cd ~/openvpn
クライアント用の秘密鍵と証明書要求を生成します。引数として任意の名前を指定します。今回の場合は「client1」です。
./easyrsa gen-req client1 nopass
ルート証明書の作成時に設定したパスワードを入力し、共通名の値はデフォルトのままにします。
生成されたクライアント証明書要求に署名します。
./easyrsa sign-req client client1
この手順では、「はい」と答えて署名を確認し、ルート証明書の生成中に作成されたパスワードを入力します。
便宜上、ホーム ディレクトリに「client1」という名前のフォルダーを作成し、クライアント コンピューターに転送するすべてのファイルをそこにコピーします。
mkdir ~/client1
cp pki/issued/client1.crt pki/private/client1.key pki/ca.crt ~/client1/
クライアント設定ファイルテンプレートを同じディレクトリにコピーします。コピー時にファイル拡張子を「.ovpn」に変更してください。
cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client1/client.ovpn
クライアントに配布できるように、ディレクトリ「~/client1/」とその中のすべてのファイルの所有者を変更します。ここでは「mihail」を所有者としましょう。
chown -R mihail:mihail ~/client1
クライアントコンピュータにアクセスし、 「~/client1/」フォルダの内容をコピーしてください。これは、Puttyに付属する「PSCP」ユーティリティを使用して実行できます。
PSCP -r mihail@[IP_сервера]:/home/mihail/client1 c:\client1
キーファイル「ca.crt」、「client1.crt」、「client1.key」は任意の場所に保存できます。この例では、「c:\Program Files\OpenVPN\keys」フォルダに保存し、設定ファイル「client.ovpn」を「c:\Program Files\OpenVPN\config」ディレクトリに移動しています。
それでは、クライアントの設定に取り掛かりましょう。 「c:\Program Files\OpenVPN\config\client.ovpn」ファイルをテキストエディタで開き、以下の行を編集してください。
#announce that this is the client
client
#interface and protocol just like on the server
dev tun
proto udp
#IP address of the server and port
remote ip_address 1194
#saving parameters after reload
persist-key
persist-tun
#key paths
ca “c:\\Program Files\\OpenVPN\\keys\\ca.cert”
cert “c:\\Program Files\\OpenVPN\\keys\\client1.crt”
key “c:\\Program Files\\OpenVPN\\keys\\client1.key”
#enable server verification
remote-cert-tls server
#disable extra encryption
#tls-auth ta.key 1
cipher AES-256-CBC
auth-nocache
verb 3
残りはそのままにしておきます。
ファイルを保存し、クライアントアプリケーション「OpenVPN GUI」を起動します。
タスクバーにあるアプリのアイコンを右クリックし、「接続」を選択します。接続が成功すると、アイコンが緑色に変わります。
任意のオンライン サービスを使用して、パブリック IP アドレスが変更され、サーバーの IP アドレスと同じになっていることを確認します。