このガイドでは、UbuntuホストにOpenVPNサーバーをセットアップする手順について説明します。これにより、リモートの場所からホーム/オフィスネットワークに安全にアクセスし、オプションですべてのネットワークトラフィックを送信して、インターネットにアクセスできるようになります。安全にも。
このガイドを使用する前に、OpenVPNサーバーの実行の概要に関する記事を読むことを強くお勧めします。
このガイドでは、次のことを前提としています。
- すでに最新バージョンのUbuntuをインストールしています (執筆時点で20.04)
- ルートがあります このインストールへのアクセス
- このUbuntuのインストールはクリーンインストールです
- ネットワークインターフェイスの名前を知っている(すぐ下の手順)
- ターミナルまたはSSH経由でサーバーにアクセスできます
- SCPまたは同様のプロトコルを使用してサーバーの内外でファイルをコピーできます
- クライアントデバイスにViscosityのコピーがすでにインストールされています
Ubuntuのコピーをダウンロードしてインストールする必要がある場合は、http://www.ubuntu.com/downloadに情報があります。 Ubuntuインスタンスの設定の詳細については説明しません。多くのガイドがオンラインで見つかります。別のバージョンのUbuntuを実行している場合でも、このガイドで概説されている手順の多くまたはすべてが引き続き適用される可能性があります。別のオペレーティングシステムでOpenVPNサーバーをセットアップする場合は、他のガイドを確認してください。
クライアントにViscosityのコピーがまだインストールされていない場合は、Viscosity(Mac | Windows)をインストールするためのこのセットアップガイドを確認してください。
SSHまたはSCPを初めて使用する場合は、導入ガイドにいくつかの手順があります。
プライマリネットワークインターフェイス(WANアクセス)の名前を取得するには、Ubuntuサーバーで次を実行します。
ip route | grep default | awk '{print $NF}'
ローカルネットワーク上のマシンにアクセスするための2番目のネットワークインターフェイスがある場合は、ファイアウォールとルーティングを設定するときに、この名前も必要になります。
残念ながら、独自のOpenVPNサーバーをセットアップするための直接サポートを提供することはできません。このガイドは、Viscosityのコピーを開始し、最大限に活用できるようにするための礼儀として提供されています。このガイドの手順を徹底的にテストして、以下の手順に従えば、独自のOpenVPNサーバーを実行するメリットを十分に享受できるようになります。
Ubuntuの詳細やヘルプについては、https://www.ubuntu.com/community
で利用できるさまざまなコミュニティリソースがあります。まず、サーバーを更新します:
sudo apt-get update
sudo apt-get -y upgrade
パッケージのアップグレードが完了した後、再起動する必要があることが通知される場合があります。その場合は、先に進んで再起動してから、再度ログインして続行してください。
OpenVPNサーバーをセットアップするには、OpenVPNをインストールする必要があります。次のコマンドを実行し、それぞれが完了するのを待って、OpenVPNリポジトリをaptに追加し、OpenVPNが自動的にインストールおよび更新されるようにしてから、OpenVPNをインストールします。
sudo wget -O - https://swupdate.openvpn.net/repos/repo-public.gpg | sudo apt-key add -
echo "deb http://build.openvpn.net/debian/openvpn/stable focal main" | sudo tee /etc/apt/sources.list.d/openvpn-aptrepo.list
注:古いUbuntuディストリビューションを使用している場合は、上記のコマンドの「focal」を、Ubuntu 16.04の場合は「xenial」に、Ubuntu18.04の場合は「bionic」に置き換えてください。
sudo apt-get update
sudo apt-get -y install openvpn
構成、証明書、およびキーの生成
次のステップは、サーバーとクライアントの構成、およびそれらに対応する証明書を生成することです。これは、証明書とキーの作成ガイドに従って簡単に行うことができます。 Ubuntuのセクションに従って、サーバーからクライアント構成をコピーするか(これをお勧めします)、PCまたはMacですべてを生成してサーバーをコピーすることができます。 Ubuntuサーバー上に生成されるフォルダー。
デフォルトのDNSサーバー(10.8.0.1)を使用する場合は、自分でDNSサーバーをセットアップする必要があります。手順はこの記事の最後にあります。代わりに、既存のDNSサーバーを使用することをお勧めします。Google(8.8.8.8および8.8.4.4)のような公開されているDNSサーバーが最も簡単です。
構成を生成したら、サーバー構成をサーバーに転送するか、クライアント構成をサーバーから転送する必要があります。ローカルアクセスがある場合は、USBドライブが最も簡単です。そうでない場合は、イントロダクションガイドでSCPを使用してファイルを転送する方法についてサポートがあります。
IP転送
VPNを通過するリクエストを転送するには、OpenVPNサーバーをルーターのように機能させる必要があります。そのため、IP転送を有効にする必要があります。ターミナルで、次のように入力して、UbuntuサーバーでIP転送を有効にできます。
echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward
ただし、サーバーを再起動するたびに、このコマンドは元に戻されます。これが起こらないようにするには、nanoを使用してsysctl.confファイルを変更する必要があります。入力:
sudo nano /etc/sysctl.conf
次のセクションまでスクロールダウンします。
# Uncomment the next line to enable packet forwarding for IPv4 #net.ipv4.ip_forward=1
行の先頭にある「#」文字を削除して、次のようにします。
net.ipv4.ip_forward=1
完了したら、ctrl
を押します。 + x
nanoを終了します。プロンプトが表示されたら、変更を保存します。
ホーム/オフィスネットワーク上のホストがVPNサーバーを確実に検出できるようにするには、サーバーがARP要求に応答するようにする必要があります。
echo 1 | sudo tee /proc/sys/net/ipv4/conf/ens33/proxy_arp
ここでens33 は、2つのネットワークインターフェイスがある場合はホーム/オフィスネットワークのネットワークインターフェイス、それ以外の場合はプライマリネットワークインターフェイス(WAN)です(詳細については、準備のセクションを参照してください)。
UbuntuにデフォルトでインストールされているUncomplicatedFirewall(ufw)を使用して、トラフィックがOpenVPNサーバーを通過する方法を制御します。 Ubuntuサーバーが外部からアクセス可能である場合(ルーターなしで独自のIPアドレスを使用してインターネットに直接接続している場合)、ufwを使用して、上記で設定したOpenVPNポート(1194)を許可する必要があります。それ以外の場合は、すべてのトラフィックを許可するようにufwを設定し、ルーティングの設定を構成します。
Ubuntuサーバーを保護するためにufwを必要としない場合 (つまり、ルーターの背後にあるか、別のファイアウォールが設定されている)、すべてのトラフィックがデフォルトでufwを通過できるように、デフォルトの入力ルールを設定する必要があります。そのためには、構成ファイルを変更する必要があります。
- このファイルをnanoで開きます:
-
sudo nano /etc/default/ufw
-
- セクションまで下にスクロールします。
# Set the default input policy to ACCEPT, DROP, or REJECT. Please note that if
# you change this you will most likely want to adjust your rules.
DEFAULT_INPUT_POLICY="DROP"
- サーバーはこのファイアウォールを保護に使用しないため、これを「DROP」から「ACCEPT」に変更します
- セクションまで下にスクロールします。
# Set the default forward policy to ACCEPT, DROP or REJECT. Please note that
# if you change this you will most likely want to adjust your rules
DEFAULT_FORWARD_POLICY="DROP"
- 転送ポリシーを「DROP」から「ACCEPT」に変更します
-
ctrl
を押します +x
nanoを終了します。プロンプトが表示されたら、変更を保存します。
Ubuntuサーバーを保護するためにufwが必要な場合 、DROPのデフォルトの入力および転送ポリシーがあるため、許可するポートを指定する必要があります。 OpenVPNサーバーを離れた場所から実行している場合は、SSHで接続して設定を変更する必要があります。そのため、SSHトラフィックを許可するようにファイアウォールに指示する必要があります。
- ターミナルに次のように入力します:
-
sudo ufw allow ssh
-
- OpenVPNサーバーに送信するVPNトラフィックはポート1194でUDPを経由するため、ターミナルに入力します。
-
sudo ufw allow 1194/udp
-
Ubuntuサーバーで他のサービスを実行している場合は、それらのサービスがufwを通過できるようにする必要があります。 Ubuntuサーバーがリッスンしている他のポート(Plexメディアサーバーや独自の電子メールサーバーなど)の許可ルールを必ず追加してください。
次に、ネットワーク設定に関係なく 、ufwのルーティングルールを設定する必要があります。
- ufw構成ファイルをnanoで開きます:
-
sudo nano /etc/ufw/before.rules
-
- カーソルをセクションの下に移動します:
-
#
# rules.before
#
# Rules that should be run before the ufw command line added rules. Custom
# rules should be added to one of these chains:
# ufw-before-input
# ufw-before-output
# ufw-before-forward
-
- 次のように貼り付けます:
-
# START OPENVPN RULES
# NAT table rules
*nat
:POSTROUTING ACCEPT [0:0]
# Uncomment the next POSTROUTING line and replace ens33 with the name
# of your Local Network Interface if you have a second network interface
# for accessing machines on your local network
# Allow OpenVPN client to communicate with local home network
#-A POSTROUTING -s 10.8.0.0/24 -d 192.168.0.0/24 -o ens32 -j MASQUERADE
# Allow traffic from OpenVPN client to your WAN and/or LAN via ens33
-A POSTROUTING -s 10.8.0.0/24 -o ens33 -j MASQUERADE
COMMIT
# END OPENVPN RULES- ens33を置き換えます プライマリネットワークインターフェイスが異なる場合は、その名前を使用します(詳細については、準備のセクションを参照してください)
-
- カーソルをセクションの下に移動します:
-
# Don't delete these required lines, otherwise there will be errors
*filter
:ufw-before-input - [0:0]
:ufw-before-output - [0:0]
:ufw-before-forward - [0:0]
:ufw-not-local - [0:0]
# End required lines
-
- 次のように貼り付けます:
-
#Accept all traffic to and from VPN
-A ufw-before-input -i tun+ -j ACCEPT
-A ufw-before-output -i tun+ -j ACCEPT
# Forward traffic to and from the VPN
-A ufw-before-forward -s 10.8.0.0/24 -j ACCEPT
-A ufw-before-forward -d 10.8.0.0/24 -j ACCEPT
-
-
ctrl
を押します +x
nanoを終了します。プロンプトが表示されたら、変更を保存します。
これで、Ufwをアクティブ化する準備が整いました。
- ターミナルで、次のように入力します。
-
sudo ufw enable
-
- このUbuntuインスタンスにSSHで接続している場合は、次のプロンプトが表示されます。
Command may disrupt existing ssh connections. Proceed with operation (y|n)?
-
y
で返信する必要があります 。
次の出力が表示されます(SSHかどうかに関係なく)
Firewall is active and enabled on system startup
OpenVPNサーバーの起動
この時点で、基本は完了です。サーバー構成とファイルは、サーバー上で生成されるか、生成した場所からコピーされたサーバー上にある必要があります。
まず、サーバー構成ファイルをOpenVPNディレクトリにコピーします。
sudo cp /path/to/configs/server/* /etc/openvpn/
次に、サーバーを起動し、再起動後も起動できるようにします。
sudo systemctl enable [email protected]
sudo systemctl start [email protected]
サーバーのステータスを確認するには、次のように入力します。
sudo systemctl status [email protected]
返信先:
Active: active (running) since Thu 2017-06-01 17:06:29 PDT; 4s ago
サーバーがアクティブ(実行中)としてリストされていない場合は、何が問題になったかを示すログ出力が表示されます。
これでOpenVPNサーバーが稼働し、接続する準備が整いました。
Ubuntuサーバーに直接アクセスできる場合 、次にこのセクションをスキップできます 。構成するルーターはありません。
ただし、Ubuntuサーバーがルーターの背後にある場合(自宅のWiFiなど)、VPNトラフィックを許可するようにルーターを構成する必要があります。詳細については、OpenVPNサーバーの実行の概要に関する記事を参照してください。
最後のステップは、粘度を設定することです。 openvpn-generateのおかげで、これはインポートして接続するのと同じくらい簡単です。
openvpn-generateで作成した*.viszファイルをViscosityがインストールされているMacまたはWindowsマシンにコピーし、ファイルをダブルクリックします。構成が正常にインポートされたことを示すプロンプトが表示されます。
VPN接続の接続と使用
これで接続する準備が整いました。 macOSメニューバーまたはWindowsシステムトレイの粘度アイコンをクリックして粘度メニューを開き、インポートした接続を選択すると、粘度が接続されます。
VPNが稼働していることを確認するには、[粘度]メニューから[詳細]ウィンドウを開きます。これにより、接続の詳細、トラフィック、OpenVPNログを表示できます。
これで、独自のOpenVPNサーバーをセットアップできました。おめでとうございます。これで、独自のOpenVPNサーバーを操作するメリットを自由に享受できます。
クライアント用に独自のDNSサーバーを実行することを選択した場合、以下はdnsmasqのセットアップ例です。次のコマンドを使用してdnsmasqをインストールします。
sudo apt-get install -y dnsmasq
最初に、デフォルトでNetworkManagerによって提供されるdnsmasqインスタンスを無効にする必要があります。このデフォルトのインスタンスは制限されており、VPNを介してDNS要求をリッスンすることはできません。
- NetworkManager設定を開きます:
-
nano /etc/NetworkManager/NetworkManager.conf
-
- 行の先頭に「#」文字を追加して、dnsmasqを有効にする行をコメントアウトします。
-
dns=dnsmasq
-
-
ctrl
を押します +x
nanoを終了します。プロンプトが表示されたら、変更を保存します。
次に、デフォルト構成のいくつかを変更する必要があります。
- 元のdnsmasq構成のバックアップを作成します:
-
cp /etc/dnsmasq.conf /etc/dnsmasq.conf.bak
-
- Ubuntuサーバー(127.0.0.1)およびVPN(10.8.0.1)からのリクエストをリッスンするようにDNSサーバーを設定します。
-
echo -e "listen-address=127.0.0.1, 10.8.0.1\nbind-interfaces" > /etc/dnsmasq.conf
-
- DNSリクエストがルートDNSサーバーに不正なリクエストで溢れるのを防ぎます:
-
echo -e "domain-needed\nbogus-priv" >> /etc/dnsmasq.conf
-
- Google DNSサーバーを使用してリクエストを解決します(選択したDNS解決サービスを自由に使用できます):
-
echo -e "server=8.8.8.8\nserver=8.8.4.4" >> /etc/dnsmasq.conf
-
- dnsmasqサービスを再起動して、変更を有効にします。
-
service dnsmasq restart
-
DNSサーバーが要求したアドレスをリッスンしていることを確認するには、次のように入力します。
netstat -anup
127.0.0.1および10.8.0.1を含むアドレスのリストが表示されます。
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name ... udp 0 0 127.0.0.1:53 0.0.0.0:* 54892/dnsmasq udp 0 0 10.8.0.1:53 0.0.0.0:* 54892/dnsmasq ...
最後に、システム起動時にOpenVPNの後にdnsmasqが開始されるようにする必要があります。デフォルトでは、dnsmasqはOpenVPNの前に実行されます。これにより、VPNがまだ存在しないため、VPN用のDNSサーバーをセットアップできなくなります。
- 元のファイルのバックアップを作成します:
-
cp /etc/rc.local /etc/rc.local.bak
-
- タイプ:
-
echo -e "service dnsmasq restart\nexit 0" >> /etc/rc.local
-
- このスクリプトを実行可能にします:
-
chmod +x /etc/rc.local
-
これで、DNSサーバーのセットアップが完了しました。