[OpenVPN] LinuxクライアントのDNS設定を変更する

OpenVPNのロゴにサーバの背景

OpenVPN で構築したVPNに接続する際、設定ファイルでDNSの設定を変更することができることは知っている人も多いと思います。しかし、クライアントがLinuxの場合のみ、通常の方法ではDNSの設定を変更することができません。そこで、今回はLinuxのOpenVPNクライアントのDNS設定を変更する方法を紹介します。

想定環境

・CentOS 7.0 ~ 7.5

基本的な設定方法(全プラットフォーム共通)

クライアントがLinuxであれ、Windowsやほかの端末であれ、以下の設定が必要です。Linux以外のクライアントに対しては、この設定をするだけでDNS設定を変更することができます。

基本的には2パターンの設定方法があります。おすすめは後者の方法です。

クライアント設定ファイルで変更する場合

client.conf (Windows / iOSの場合、client.ovpn)ファイルに以下のように追記します。

dhcp-option DNS <DNSサーバーのIPアドレス>

#設定例
dhcp-option DNS 8.8.8.8
dhcp-option DNS 8.8.4.4

こうすることで、VPN接続時にOSレベルで自動的にDNSの設定が変更され、VPN接続中は設定されたDNSを使うようになります。VPNを切断すると自動的に変更前の設定に戻ります。

サーバー設定ファイルで変更する場合

サーバ側の設定ファイルでは、接続してきたクライアントに対して指定したオプションを適用させることができます。

server.conf ファイルに以下のように追記します。

push "dhcp-option DNS <DNSサーバーのIPアドレス>"

#設定例
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"

こうすることで、このサーバーに接続してきたすべてのクライアントに対してDNSサーバーの設定を適用することができます。

結果としては、クライアント設定ファイルに設定するのと同じですが、この方法だとサーバーに一度設定をするだけで、全クライアントに設定が反映されるという点で優れています。

また、OpenVPNには、サーバー側から、クライアント個別に設定ファイルを適用することができる機能があります。(詳しくは、How To | OpenVPN.JP を参照)これと組み合わせることで、クライアントごとに異なるDNS設定をサーバーから送ることも可能です。

Linuxクライアントの場合

前節の設定を行っただけでは、クライアントがLinuxの場合DNS設定が反映されません。追加で以下の設定をする必要があります。

注意事項

システムにインストールされている systemd のバージョンが229以降の場合、この方法は使えないようです。CentOS7.5 では2018年10月現在、バージョン219なので問題ないと思いますが、他のディストリビューションを使用している場合は注意してください。

openresolv のインストール

openresolv は、DNS設定をつかさどる /etc/resolv.conf をプログラムから安全に変更するフレームワークです。以下のURLに飛び、Downloads から最新版のダウンロードURLを確認し、ダウンロードします。

openresolv | Roy’s Place

#ダウンロード・展開
$ wget https://roy.marples.name/downloads/openresolv/openresolv-3.9.0.tar.xz
$ tar Jfx openresolv-3.9.0.tar.xz

#インストール
$ cd openresolv-3.9.0
$ ./configure
$ make
$ sudo make install

openvpn-update-resolv-conf の設置

OpenVPN から openresolv を呼び出すスクリプトをダウンロードして、 /etc/openvpn に配置します。

$ cd /etc/openvpn
$ sudo wget https://raw.githubusercontent.com/masterkorp/openvpn-update-resolv-conf/master/update-resolv-conf.sh

#実行権限の付与
$ sudo chmod 744 update-resolv-conf.sh

サーバー設定ファイルへの追記

OpenVPN のサーバー設定ファイル server.conf に以下のように追記します。

# This updates the resolvconf with dns settings
setenv PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
script-security 2
up /etc/openvpn/update-resolv-conf.sh
down /etc/openvpn/update-resolv-conf.sh
down-pre

OpenVPN の再起動

$ sudo systemctl restart openvpn@client

/etc/resolv.conf が変更されていれば成功です。

$ cat /etc/resolv.conf
# Generated by resolvconf
nameserver 8.8.8.8
nameserver 8.8.4.4

あわせて読みたい

コメントを残す

質問・感想などお気軽にどうぞ。
*が付いている項目は入力必須です。メールアドレス以外の項目が公開されます。
スパム防止のため、コメント反映まで少々時間がかかります。