DD-WRTがインストールされたルーターで実行されているOpenVPNサーバーを使用しており、それを使用してすべてのトラフィックをVPNサーバーにルーティングしています。 Windowsラップトップ、Androidデバイス、Linuxマシンなど、いくつかのデバイスから接続しています。私が今抱えている問題は最近のもので、以前はすべてがうまくいきました。この問題は、Linux(ubuntu 16.04)を使用するクライアントマシンでのみ発生します。 ubuntuクライアントは、DNSサーバーのアドレスを自動的に取得しません。いくつかの調査の結果、クライアント構成の最後に次を追加する必要があることがわかりました。
script-security 2
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf
これは役に立たなかったので、私も追加しました:
dhcp-option DNS a.b.c.d
dhcp-option DNS e.f.g.h
IPはルーターから取得され、動作します。これまでは、クライアント構成に「redirect-gateway def1」があれば十分でした。
DNSサーバーの変更を監視する必要があるため、「dhcp-option DNS」コマンドを追加するこのソリューションが気に入らない。 「dhcp-option DNS」オプションの追加を取り除く方法はありますか?
私は同じ問題を抱えていましたが、次のハックを使用してそれを解決できました:up /etc/openvpn/update-resolv-conf
の代わりに、/ etc/openvpnにup.shという名前のファイルを作成しました。コマンドSudo gedit /etc/openvpn/up.sh
を実行し、次を貼り付けます。
#! /bin/bash
DEV=$1
if [ ! -d /tmp/openvpn ]; then
mkdir /tmp/openvpn
fi
CACHE_NAMESERVER="/tmp/openvpn/$DEV.nameserver"
echo -n "" > $CACHE_NAMESERVER
dns=dns
for opt in ${!foreign_option_*}
do
eval "dns=\${$opt#dhcp-option DNS }"
if [[ $dns =~ [0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3} ]]; then
if [ ! -f /etc/resolv.conf.default ]; then
cp /etc/resolv.conf /etc/resolv.conf.default
fi
cat /etc/resolv.conf | grep -v ^# | grep -v ^nameserver > /tmp/resolv.conf
echo "nameserver $dns" >> /tmp/resolv.conf
echo $dns >> $CACHE_NAMESERVER
cat /etc/resolv.conf | grep -v ^# | grep -v "nameserver $dns" | grep nameserver >> /tmp/resolv.conf
mv /tmp/resolv.conf /etc/resolv.conf
fi
done
保存してSudo chmod +x /etc/openvpn/up.sh
を実行し、別のファイル/etc/openvpn/down.sh
を作成して、以下を貼り付けます
#! /bin/bash
echo "Restoring original nameservers"
rm -f /etc/resolv.conf
ln -s /run/resolvconf/resolv.conf /etc/resolv.conf
echo "Done restoring nameservers cheers"
保存してSudo chmod +x /etc/openvpn/down.sh
を実行します
次の行を削除します。
script-security 2
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf
そして、それらを次のものに置き換えます。
script-security 2
up /etc/openvpn/up.sh
down /etc/openvpn/down.sh
/etc/systemd/resolved.confを編集して、DNSエントリを追加します。
DNS=8.8.8.8 8.8.4.4
OpenVPN接続を起動または切断するときにDNSを失った場合、次を実行します。
Sudo systemctl restart systemd-resolved
(おそらく、OpenVPN接続のアップ/ダウンスクリプトでそれを突き出すことができます)。