-->

在ubuntu16.04 上的 openvpn 折腾笔记 以及 ubuntu18.04 dns 设置

Posted on By Marquis

以下参考自:
OpenVPN GUI client for UDP/TCP

修改 dns server

前言

对于windows而言,使用openvpn客户端连接openvpn server之后,貌似dns是不会出问题的,或许windows会从 openvpn server 拉去dns吧。
而对于Ubuntu而言,使用openvpn客户端连接openvpn server之后,Ubuntu系统自己的dns就不能用了。

这个时候有两种解决方案:

  1. 想办法把服务器端的dns 拉过来,也就是说,本地的Ubuntu系统使用 openvpn server端的dns (推荐的方案)。
  2. 在本地的ubunt系统设置dns,自己解析域名。

推荐的方案:想办法把服务器端的dns 拉过来

我们使用 apt install openvpn 之后,会在 /etc/openvpn 目录生成一个名为 update-resolv-conf 的可执行文件(脚本),它就是用来拉取服务器端的dns的。

先说怎么查看本机在用的dns: cat /etc/resolv.conf 就行了。

所以我们告诉openvpn,使用这个脚本去使用dns,就是修改你的openvpn配置文件,在配置文件的顶端写入:

script-security 2
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf

此时,运行 sudo openvpn your_vpn.ovpn 之后,再运行 cat /etc/resolv.conf 就可以看到发生了变化,如果你在服务器端设置了dns,例如在softether server的 secrete nat那里设了114.114.114.114,它就会出现被拉取到本机了.

不推荐的方案:在本地的ubunt系统设置dns,自己解析域名

ubuntu16.04

修改 /etc/network/interfaces 文件,加入一行:
dns-nameservers 8.8.8.8
即可,若想加入多个 dns server,可继续在其后加入类似的命令。
例如再加入一行,就变成:

dns-nameservers 8.8.8.8

重启系统就能更新dns server啦。
查看一下是否更新成功,cat /etc/resolv.conf
就会看到多了一行:

nameserver 8.8.8.8

ubuntu18.04

根据How to set DNS nameservers in Ubuntu Server 18.04
貌似18.04不让我们通过修改/etc/network/interfaces来配置dns了。
现在要用 Netplan,使用 yaml 文件进行配置。

执行了本文最下面 第二种方式:使用network manager 的三行命令以后,
我的 /etc/netplan 目录有一个名为 01-network-manager-all.yaml 的文件,其内容为:

# Let NetworkManager manage all devices on this system
network:
  version: 2
  renderer: NetworkManager

很明显它把后端设为了NetworkManager。
由于我是装了NetworkManager才看这个目录的,所以,由于我也不知道这个文件原来是啥样。

netplan官网 有一点教程,但我自己老是卡在 yaml 的格式上。
这种文件貌似没法用TAB,只能用两个空格进行ident。

下面开始进行探索。
首先是 初始探索:
我的初始配置文件为(别急着抄这个,后面还要改):

# Let NetworkManager manage all devices on this system
network:
  version: 2
  renderer: NetworkManager
  ethernets:
    wlo1:
      nameservers:
        addresses: [8.8.8.8]   
    tun0:
      nameservers:
        addresses: [8.8.8.8]    

其中,wlo1tun0 是我的两个网卡,这俩名字是 ip a 的时候看到的,有线网卡我没设置(现在默认不装ifocnfig 了)。

然后使其生效:sudo netplan apply
注:,自己测试的时候最好用 sudo netplan --debug apply,调试输出会更多一点。

怎么知道是否设置成功了呢?
第一种方法:连接 vpn 之后,ping google.com 能ping通,就说明设置成功了。
第二中方法:使用 systemd-resolve --status,如果能看到我们设置的dns就成功啦。

根据我的实验,不知道是啥原因,老是没法成功,但将后端的renderer设为 networkd,就能设置成功,但后端变了以后,由于我喜欢采用network manager连接vpn,而后端设为 networkd 后,network manager就没里面的 vpn 就没法打开了,咋办?我再将renderer设为 NetworkManager,重新运行sudo netplan apply就行了。

其实不用这么麻烦,直接重启电脑就行了!
这里是 最终的修改:
我还试了只设置我的vpn的“虚拟网卡”(姑且这么叫吧) 即 tun0 的dns,不设无线网卡即 wlo1 的dns,发现是不行的。
我还试了,只设置无线网卡的就行了。
另外还可以设置多个dns。
所以最终的配置为:

# Let NetworkManager manage all devices on this system
network:
  version: 2
  renderer: networkd
  ethernets:      
    wlo1:
      nameservers:
        addresses: [8.8.8.8,74.82.42.42,208.67.222.222]  

然后运行sudo netplan apply
如果此时无线网显示一个问号,没法连接无线网,那么就先 turn off 无线网卡,然后turn on就行了。

如何安装 openvpn

第一种方式:命令行

安装 openvpn:sudo apt-get install openvpn
打开terminal,输入 sudo openvpn --config,然后将openvpn的配置文件拖到terminal上,回车(此时可能会打开配置文件,关掉配置文件即可)
输入用户名和密码就连接成功了。
打开浏览器,用必应搜索my ip address,如果显示为你的vpn服务器的地址,就成功啦。

但这种方式有个缺点,每次都得重新输入用户名和密码

第二种方式:使用network manager

我搜了很久,在Linux上,没有真正意义上的openvpn gui 客户端。
只能按照上面链接的一个回答,使用network manager来操作。

sudo apt-get install openvpn
sudo apt-get install network-manager-openvpn
sudo apt-get install network-manager-openvpn-gnome

注意,选择从配置文件建立vpn,之后的Authentication Type选为 Password即可。
后边的证书应该是它自己从配置文件提取的,不用管。

打开浏览器,用必应搜索my ip address,如果显示为你的vpn服务器的地址,就成功啦。

避免每次都是输入用户名和密码

下面讲一下,如何修改openvpn配置文件,避免每次都是输入用户名和密码.
在你的 .ovpn 配置文件中,找到 auth-user-pass 这一行, 将其改为:

auth-user-pass /home/marquis/vpnclient.auth
auth-nocache

注意这是两行哈。
其中 /home/marquis/vpnclient.auth 就是你的用户名和密码文件,其内容为:

username
password

注意这是两行哈。

openvpn 运行时间长了以后死掉的 bug 的解决方法:手动关闭隧道连接

由于softether 的默认openvpn连接是udp的,因此很容易出现连接时间长了以后断掉的问题,咋办呢?
这时候的症状:无法解析dns,上不了网,一般只能重启电脑了.其实还有更体面的做法:手动关掉隧道连接.

这时候即使我们的一般做法是,关掉openvpn,然后 ifconfig 之后发现是 tun0 还存在着,
我们只需要运行 sudo ifconfig tun0 down 就行了,不需要重启电脑哈.