前書き

OpenVPNは、オープンネットワークの仮想プライベートネットワーク(VPN)サーバー/クライアントアプリケーションであり、(LANに似た)仮想ネットワークに安全に参加できます。

このチュートリアルでは、IPv4 NATとルーティングを備えたFreeBSD 10.1マシンにOpenVPNサーバーをインストールして設定する方法を説明します。 さまざまな構成オプションの簡単な説明が含まれています。

このチュートリアルの終わりまでに、独自のOpenVPNサーバーを実行し、このネットワークに接続するためのクライアント構成ファイルをダウンロードする準備が整います。

前提条件

  • FreeBSD 10.1ドロップレット。 ドロップレットのサイズは、VPNに接続するクライアントの数によって異なります。いくつかのクライアントでは519 MBで十分

  • ルートアクセス。 sudoはDigitalOceanにプリインストールされているため、特別なことは何もありません

このチュートリアルにはルートアクセスが必要です。 DigitalOceanで、デフォルトの* freebsd ユーザーとしてサーバーにアクセスしてから、 root *シェルにアクセスします。

sudo tcsh

ステップ1-OpenVPNのインストール

`+ pkg +`システムでOpenVPNをインストールするのはとても簡単です。 これらのコマンドを実行して、パッケージリストを更新し、VPNソフトウェアをインストールするだけです。

pkg update
pkg install openvpn

これは、SSLキーペアの生成に使用される `+ easy-rsa +`パッケージもインストールする必要があります。

ステップ2-OpenVPNサーバーの構成

このチュートリアルでは、OpenVPNが提供するサンプルファイルに基づいて構成ファイルを作成します。 OpenVPNの構成フォルダーを作成します。

mkdir /usr/local/etc/openvpn

サンプルの `+ server.conf +`ファイルを新しいディレクトリにコピーします。

cp /usr/local/share/examples/openvpn/sample-config-files/server.conf /usr/local/etc/openvpn/server.conf

`+ nano +`またはお気に入りのテキストエディターをインストールします。

pkg install nano

編集のために構成ファイルを開きます。

nano /usr/local/etc/openvpn/server.conf

_
注意: OpenVPN構成ファイル形式では、コメントの前にセミコロン( +; +)またはハッシュ( )が付けられます。 この例では、構成オプションをコメント化(無効化)するためにセミコロンが使用され、コメントにはハッシュが使用されます。
_

変更する構成オプションがわかっている場合は、この時点で変更できます。

  • オプション + port +:デフォルトのポートは1194ですが、これは好きなものに変更できます

  • オプション + proto +: `+ tcp `または ` udp +`のいずれかを選択します。デフォルトは問題ありません

  • + user`と + group`:これらの行のコメントを外して、これらを `+ nobody`に設定します。 これにより、セキュリティのためにOpenVPNがより少ない権限で実行されます

user nobody
group nobody

_
*注意:*各構成は、一度に1つのポートとプロトコルのみを実行できます。
_

最後に、変更を必ず保存してください。

手順3-サーバー証明書とキーの生成

`+ easy-rsa +`を使用すると、証明書とキーを簡単に生成できます。

値を変更するため、最初にプログラムを構成ディレクトリにコピーします。

cp -r /usr/local/share/easy-rsa /usr/local/etc/openvpn/easy-rsa

編集のために `+ vars +`ファイルを開きます:

nano /usr/local/etc/openvpn/easy-rsa/vars

次の行を変更して、キーサイズを変更します。

export KEY_SIZE=

最近では標準は2048ビットキーですが、4096ビットを使用することもできます。これはより安全ですが、ネゴシエーションが遅くなります。

必要に応じて、このファイルにデフォルトの証明書とキーの値を設定して、後で入力する必要がないようにすることもできます。

使用しているシェルは「+ tcsh in」なので、「+ export」行を「+ setenv」に置き換える必要があります。 これは、「+ source」の前に「+ used」を使用して行われます。 `+ easy-rsa +`ディレクトリに移動します(必須)。

cd /usr/local/etc/openvpn/easy-rsa/

行を置き換えます。

cat ./vars | sed -e 's/export /setenv /g' -e 's/=/ /g' | source /dev/stdin

まだ `+ / usr / local / etc / openvpn / easy-rsa / +`ディレクトリから、最初にディレクトリをクリーンアップしてから認証局(CA)を構築します。

./clean-all
./build-ca

CAオプションを設定するように求められます。 詳細を記入してください:

Country Name (2 letter code) [US]:
State or Province Name (full name) [CA]:
Locality Name (eg, city) [SanFrancisco]:
Organization Name (eg, company) [Fort-Funston]:
Organizational Unit Name (eg, section) [changeme]:
Common Name (eg, your name or your server's hostname) [changeme]:
Name [changeme]:
Email Address [[email protected]]:

サーバーキーを作成します。

./build-key-server server

繰り返しますが、オプションを設定します。 パスワードやオプションの会社名は必要ありません。

キーに署名してコミットするには、「+ y +」を入力します。

Country Name (2 letter code) [US]:
State or Province Name (full name) [CA]:
Locality Name (eg, city) [SanFrancisco]:
Organization Name (eg, company) [Fort-Funston]:
Organizational Unit Name (eg, section) [changeme]:
Common Name (eg, your name or your server's hostname) [server]:
Name [changeme]:
Email Address [[email protected]]:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

Certificate is to be certified until Feb  5 14:40:15 2025 GMT (3650 days)
Sign the certificate? [y/n]:

1 out of 1 certificate requests certified, commit? [y/n]
Write out database with 1 new entries
Data Base Updated

最後に、Diffie-Hellmanキーを生成する必要があります。 これは、キーのサイズによっては時間がかかる場合があります。

./build-dh

すべてのサーバーキーと証明書が生成されたので、それらをOpenVPN構成ディレクトリにコピーする必要があります。

cd /usr/local/etc/openvpn/easy-rsa/keys/
cp dh*.pem ca.crt server.crt server.key /usr/local/etc/openvpn/

サーバー証明書はこれで完了です! クライアント証明書について説明します。

ステップ4-クライアント証明書の生成

また、各クライアントは、VPNを認証して接続するために、それぞれ証明書とキーを必要とします。 `+ / usr / local / etc / openvpn / easy-rsa / +`ディレクトリにいることを確認してください。

cd /usr/local/etc/openvpn/easy-rsa/

次のコマンドを実行します。「++」は、この特定のクライアント証明書に使用する名前です。

./build-key

国名、都市名などの入力を求められます。 再び。 このプロセスは、サーバーキーの生成と同じです。 これはクライアントの情報であることが意図されていますが、実際には重要ではありません。

パスフレーズや会社名は必要ありません。 証明書に署名してコミットするには、「+ y +」を入力します。

_
*注:*クライアントごとに異なる証明書を使用することをお勧めします。これはデフォルトでOpenVPNによって強制されます。 ただし、必要に応じて、これをOpenVPN構成で無効にすることができます(後で説明します)。
_

「2048」とは異なるキーサイズを使用した場合、使用したキーサイズのファイル名と一致するようにOpenVPN設定を変更する必要があります。 覚えていない場合は、次のコマンドで `+ dh +`ファイルの正しいファイル名を表示できます。

ls /usr/local/etc/openvpn/easy-rsa/keys/dh*.pem

`+ server.conf +`を編集します:

nano /usr/local/etc/openvpn/server.conf

行 `+ dh dh2048.pem +`を以下で置き換えます:

dh dh.pem

以前に2048ビットキーの推奨事項に従った場合は、変更する必要はありません。

作成するクライアント証明書ごとにこのセクションを繰り返します。

ステップ5-IPv4 NATルーティングの構成

FreeBSDには、NATルーティングを可能にし、OpenVPNに使用できる「+ ipfw 」ファイアウォールの一部として「 natd 」が含まれています。 これを使用するには、 ` / etc / rc.conf +`を編集します:

nano /etc/rc.conf

これらのコンテンツを下部に追加します。

firewall_enable="YES"
firewall_type="open"

gateway_enable="YES"
natd_enable="YES"
natd_interface="vtnet0"
natd_flags="-dynamic -m"
  • `+ firewall_enable `は ` natd `に必要な ` ipfw +`ファイアウォールを有効にします

  • `+ firewall_type =” open “+`はファイアウォールがデフォルトとしてトラフィックを許可するようにします

  • `+ gateway_enable `は ` net.inet.ip.forwarding `を ` 1 +`に設定し、システムでのIPv4ルーティングを許可します

  • `+ natd_enable +`は実際のNATルーターを有効にします

  • `+ natd_interface `はインターネットへの外部インターフェイスです。 ` vtnet0 +`はDigitalOceanに使用されます

  • `+ natd_flags `はNATを動的にし、 ` -m +`はポート番号を保持します

サーバーを再起動して、「+ ipfw 」と「 natd +」をロードします。

reboot

再度ログインします。 再起動後、「+ sudo tcsh +」を再度実行して* root *になるようにしてください。

ステップ6-OpenVPNルーティング構成とDNSの構成

デフォルトでは、OpenVPNは、VPNを介してインターネットトラフィックをルーティングするようにクライアントに指示するように構成されていません。 `+ / usr / local / etc / openvpn / server.conf +`のいくつかの行のコメントを解除することで、OpenVPNを介してトラフィックをルーティングするようにします。

nano /usr/local/etc/openvpn/server.conf

次の3行を見つけてコメント解除します。

push "redirect-gateway def1 bypass-dhcp"

push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"

既定のDNSサーバーはOpenDNS用ですが、任意のDNSに設定できます(「8.8.8.8」および「8.8.4.4」を使用したGoogle DNSなど)。

オプション設定:

また、コメントを外すことにより、クライアントがお互いのIPと直接通信できるようにすることもできます。

client-to-client

前述のように、複数のクライアントに同じキーと証明書を使用する場合(これは少し安全性が低い)、この行のコメントを解除します。

duplicate-cn

圧縮は、次の行で有効または無効にできます。

comp-lzo

これらの行のいずれかのコメントを外すことにより、暗号を手動で設定できます。

cipher BF-CBC        # Blowfish (default)
cipher AES-128-CBC   # AES
cipher DES-EDE3-CBC  # Triple-DES

_
*注意:*使用する暗号は、後で作成するクライアント構成ファイルでも定義する必要があります。
_

`+ aes-256-cbc`などの追加の暗号も利用できます。

ステップ7-OpenVPNの開始

次の行を + / etc / rc.conf`に追加することで、OpenVPNが起動時にロードし、 + service`コマンドでロードできるようにします。

nano /etc/rc.conf

ファイルの下部に次の行を追加します。

openvpn_enable="YES"
openvpn_configfile="/usr/local/etc/openvpn/server.conf"

これでOpenVPNサーバーは完全に構成され、ブート時にロードされます。

次を使用してサーバーを手動で起動します。

service openvpn start

期待される出力:

add net 10.8.0.0: gateway 10.8.0.2

OpenVPNサーバーが実行されています。

手順8-クライアントファイルの構成

*サーバー*で、各クライアントの構成ファイルを作成します。

まず、作業するフォルダーを作成します。

mkdir -p /usr/local/etc/openvpn/clients/

証明書の生成中に設定したクライアント名を「++」にします。 (作業ディレクトリにすぎないため、これをどのように設定するかは問題ではありません。)

新しいディレクトリに移動します。

cd /usr/local/etc/openvpn/clients//

+ easy-rsa +`で生成したクライアントキーと証明書、およびサンプルの `+ client.conf +`ファイルをコピーします。 `++`を、以前に `+ .key`ファイルと + .crt`ファイルに使用した名前に置き換えてください:

cp /usr/local/etc/openvpn/easy-rsa/keys/.crt /usr/local/etc/openvpn/easy-rsa/keys/.key ./
cp /usr/local/share/examples/openvpn/sample-config-files/client.conf ./client.conf
cp /usr/local/etc/openvpn/ca.crt ./

繰り返しますが、「++」は以前使用したものです。

`+ client.conf +`ファイルを編集します:

nano ./client.conf

`+ remote `行を更新して、ドロップレットのIPアドレス( ` ifconfig `で取得可能)とポート番号を含めます。 ` 1194 +`がデフォルトです:

remote  1194

_ _
*注意:*サーバーの `+ cipher `または ` comp-lzo `設定を変更した場合、これを ` client.conf +`ファイルに反映する必要があります。 以前と同じ設定を使用します。例えば:

cipher aes-256-cbc
;comp-lzo

この設定では、 `+ aes-256-cbc`暗号を使用し、圧縮を無効にします。

サーバー設定の「+ proto +」行を変更した場合、これもクライアントに反映する必要があります。

これらの行が前に設定したものと*一致*していることを確認してください。サーバー側で何も変更しなかった場合は、ここで変更しないでください。
_ _

ちょっとしたハウスキーピング。単一の構成ファイルに証明書とキーを埋め込みます。 これにより、個々のクライアントへの転送が容易になります。 または、構成ファイルとキーおよび2つの証明書ファイルを個別にクライアントにダウンロードできます。

同じ `+ client.conf`ファイルで、証明書とキーファイル名をコメントアウトします。

ca ca.crt
cert client.crt
key client.key

変更を保存してください。

最後に、設定ファイルに「+ ca.cert」、「。crt」、「。key」ファイルを埋め込む必要があります。 「+ cat 」または「 nano +」または最も使いやすいもの、およびOpenVPNの適切な変数を使用してコンテンツをコピーして貼り付けるか、以下に示す1行のスクリプトを使用できます。

このスクリプトを実行し、プロンプトが表示されたら「+」を入力します。 スクリプトは、OpenVPNが期待する適切な変数名と改行を使用して、証明書とキーファイルを ` client.conf +`ファイルに追加します。

echo "Enter clientName:" && set CLIENTNAME = $< && printf "\n<ca>\n" >> ./client.conf && cat ./ca.crt >> ./client.conf && printf "</ca>\n" >> ./client.conf && printf "\n<cert>" >> ./client.conf && grep -v '^ ' ./$CLIENTNAME.crt | grep -v 'Certificate' >> ./client.conf && printf "</cert>\n" >> ./client.conf && printf "\n<key>\n" >> ./client.conf && cat ./$CLIENTNAME.key >> ./client.conf && printf "</key>\n" >> ./client.conf

これは長いコマンドなので、右端までスクロールしてください。

完成した + client.conf`ファイルを + nano s`または `+ cat`で見てください。 ファイルの下部に追加されたキーと証明書が表示されます。

できました! 今やらなければならないことは、 `+ client.conf `ファイルをクライアントに配布することです。 ほとんどのクライアントは、「。conf 」よりも「 .ovpn 」の拡張子を好むため、「ローカルでファイル名を「 my_digitalocean_vpn.ovpn +」などに変更する必要があります。*

クライアントごとにこのセクションを繰り返します。 デフォルトで個別の証明書を使用するか、必要に応じて各クライアントで同じクライアント証明書を使用します。

結論とクライアントのセットアップ

OpenVPNサーバーが動作するはずです!

最後の手順で作成したクライアント設定ファイル( + / usr / local / etc / openvpn / clients // client.conf +)を*ローカルマシン*にダウンロードします。 SCPやhttps://www.digitalocean.com/community/tutorials/how-to-use-sftp-to-securely-transfer-files-with-a-remote-serverなどの安全な方法を使用してファイルをダウンロードします[SFTP]。

また、ローカルマシンにOpenVPNクライアントをインストールします。 TunnelblickはMac OS Xで正常に動作し、https://openvpn.net/index.php/open-source/downloads.html [OpenVPN]にはWindowsがありますクライアント。

クライアント構成ファイルの名前が期待どおりであることを確認してください。通常、これは「+ my_digitalocean_vpn.ovpn +」のような名前です。

ファイルをダブルクリックするか、クライアントの予想されるディレクトリに移動します。

クライアントを起動し、適切なOpenVPNサーバーに接続します。

VPNが機能していることを確認するには、http://www.whatismyip.com/などのIPアドレスチェッカーを使用します。 表示されるIPは、OpenVPNサーバーのIPと一致する必要があります。

おめでとうございます。 新しいOpenVPNサーバーに接続しました。