如何实现自动化

如何实现自动化

我在公司服务器上安装了 OpenVPN 服务器和 Bind9 DNS 服务器。服务器配置部分如下。重要的部分是推送路由和 DHCP DNS 选项。

local 10.0.9.2
port 1194
proto udp
dev tun
topology subnet
server 10.0.12.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "route 10.0.9.0 255.255.255.0" 
push "dhcp-option DNS 10.0.9.2"

在 Windows 或 Elementary OS 上连接时,一切都很顺利。只有到服务器的流量通过 VPN,其余流量不通过。如果客户端强制通过 VPN 传输所有流量,互联网访问也会正常进行。在这两种情况下,尝试访问时,git.internal.mycompany.org它都会从我的 Bind9 DNS 服务器获取 DNS 记录并正确连接。

但这在 Ubuntu 中不起作用。当整个流量通过 VPN 时,会从 DNS 中获取一条记录。但是当只有服务器流量通过 VPN 时,DNS 就无法到达,我无法通过 URL 访问 git 服务器。当通过 IP 访问时,它可以工作。

我也尝试将其添加到客户端配置中。

script-security 2
up /etc/openvpn/update-systemd-resolved
down /etc/openvpn/update-systemd-resolved

但这没有帮助。可能是因为当我尝试直接运行脚本时,出现了错误/etc/openvpn/update-systemd-resolved: řádek 404: dev: unbound variable

我不知道如何解决这个问题。我尝试在 AskUbuntu 和其他网站上搜索,但大多数建议在配置中添加上下限。这对我来说不起作用。这是一个问题,因为我的大多数同事都在使用 Ubuntu。只有少数计算机在使用 Windows 或其他 Linux 发行版。


使用应用的更改进行更新

当应用@heynnema 的更改时,控制台中打印的内容如下https://pastebin.com/DkjHguqE通过终端连接时。此后,ping git.internal.mycompany.org不起作用。

另一个发现的事实是:

  • 当我添加redirect-gateway def1 bypass-dhcp到配置中时,我的公共 IP 就是服务器的 IP,但仍然不能ping 上面的 URL。
  • 当将配置导入到 Ubuntu 的 UI 中时https://askubuntu.com/a/1188022/972420,ping 一直有效,直到我取消选中Use this connection only for traffic within this network

答案1

看来,主要问题如下systemd-resolve所述:https://github.com/systemd/systemd/issues/6076
这里有一篇非常棒的文章,我将其作为起点:https://www.gabriel.urdhr.fr/2020/03/17/systemd-revolved-dns-configuration-for-vpn/

对我来说,一个有用的小解决方法是在每次连接到 VPN 后运行此操作。基本上是手动设置 DNS

sudo resolvectl dns tun0 10.0.9.2 # Replace with IP of your DNS server
# All internal services are like git.int.mycompany.com or ldap.int.mycompany.com
# You can try to set up "~mycompany.com", worked for me as well
sudo resolvectl domain tun0 "~int.mycompany.com" 

如何实现自动化

使用 NetworkManager
如果您使用网络管理器(管理器图片可用这里),您可以使用脚本自动执行此操作/etc/NetworkManager/dispatcher.d/

创建自定义脚本,将其命名02-ifupdownchmod +x并粘贴

#!/bin/sh

EXPECTED_VPN_NAME="MyCompany VPN" # Put your VPN name here
VPN_CONN_NAME=`nmcli --get name,type con show --active | grep vpn | sed 's/\:.*//'`

if [ "$2" = "vpn-up" ] && [ "$EXPECTED_VPN_NAME" = "$VPN_CONN_NAME" ]; then
        resolvectl dns tun0 10.0.9.2 # Replace with IP of your DNS server
        resolvectl domain tun0 "~int.mycompany.com"
fi


使用 CLI
创建您的自定义脚本,设置chmod +x它并粘贴到配置中:

script-security 2
up /path/to/my/script

答案2

尝试安装这个包:

sudo apt install resolvconf openvpn-systemd-resolved

答案3

以这种方式更改您的客户端 .ovpn 模式:

由此...

script-security 2
up /etc/openvpn/update-systemd-resolved
down /etc/openvpn/update-systemd-resolved

对此...

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

答案4

它对我的作用是这样的,一个没有引号的域列表(Ubuntu 20.04)

...
 resolvectl domain ${TUN} int.example1.com example2.internal
 resolvectl dns ${TUN} 10.127.0.2

相关内容