以下参考自:
OpenVPN GUI client for UDP/TCP
修改 dns server
前言
对于windows而言,使用openvpn客户端连接openvpn server之后,貌似dns是不会出问题的,或许windows会从 openvpn server 拉去dns吧。
而对于Ubuntu而言,使用openvpn客户端连接openvpn server之后,Ubuntu系统自己的dns就不能用了。
这个时候有两种解决方案:
- 想办法把服务器端的dns 拉过来,也就是说,本地的Ubuntu系统使用 openvpn server端的dns (推荐的方案)。
- 在本地的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]
其中,wlo1
和 tun0
是我的两个网卡,这俩名字是 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
就行了,不需要重启电脑哈.