AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 1046720
Accepted
Valentin
Valentin
Asked: 2020-12-19 00:48:57 +0800 CST2020-12-19 00:48:57 +0800 CST 2020-12-19 00:48:57 +0800 CST

Ubuntu 20.04 Networkmanager OpenVPN:接受推送的 DNS 但不将所有流量路由到 tun 接口

  • 772

我正在尝试让一些 Ubuntu 20.04 客户端工作,以连接到我们的新服务器提供商提供的新 OpenVPN 服务器。

目标是仅将某些流量路由到隧道中(相应的路由由 OpenVPN 服务器推送),并使客户端也使用 OpenVPN 服务器推送的 DNS 服务器。

这适用于 Windows 10 客户端和开箱即用的 OpenVPN GUI 2.5。从这样的终端使用openvpn(2.4.7)也可以正常工作:sudo openvpn --config config.ovpn以及以下客户端配置文件config.ovpn:

dev tun
tun-ipv6
persist-tun
persist-key
cipher AES-128-GCM
ncp-ciphers AES-128-GCM
auth SHA256
tls-client
client
resolv-retry infinite
remote <ipadressOfProvider> <port> udp4
verify-x509-name "<name>" name
auth-user-pass
remote-cert-tls server
compress 
# The following is added only in the config for Ubuntu 20.04 
dhcp-option DOMAIN <domainToResolveWithRemoteSiteDNS>
script-security 2
up /etc/openvpn/update-systemd-resolved
up-restart
down /etc/openvpn/update-systemd-resolved
down-pre

使用network-manager-openvpn(1.8.12)和上述配置文件时问题开始。连接已建立,推送的 DNS 服务器在 systemd-resolved中正确更新(即使在 openvpn 配置中没有附加up和脚本)。down

但是,所有流量都会路由到tun0接口,甚至是公共流量。结果是即使使用内部域名我也可以访问远程站点的资源,但无法访问互联网,因为 OpenVPN 子网没有直接的互联网访问权限。

在网络管理器 openvpn 配置中更改选项将此连接仅用于其网络上的资源(与通过ipv4.neverdefault显示的选项相对应nmcli c show config)解决了路由问题:现在,只有与推送路由有关的流量被引导到隧道中。但是,它也阻止了推送的 DNS 服务器应用于/run/systemd/resolve/resolv.conf.

到目前为止,我还没有找到一个选项来接受推送的 DNS并仅路由与网络管理器同时与推送的路由有关的流量。

到目前为止,一些可能有趣的观察结果:

1. 路线

ipv4.neverdefault=no除了推送的路由之外,网络管理器还会创建第二个具有较低度量的默认网关:

$ ip route
default via 10.*.*.* dev tun0 proto static metric 50 
default via 192.168.***.** dev wlp3s0 proto dhcp metric 600 
10.*.*.*/24 dev tun0 proto kernel scope link src 10.*.*.* metric 50 
158.***.**.** via 192.168.***.** dev wlp3s0 proto static metric 600 
169.254.0.0/16 dev wlp3s0 scope link metric 1000 
172.**.***.*/24 via 10.*.*.* dev tun0 proto static metric 50 
192.168.*.*/24 via 10.*.*.* dev tun0 proto static metric 50 
192.168.*.*/24 via 10.*.*.* dev tun0 proto static metric 50 
192.168.***.*/24 dev wlp3s0 proto kernel scope link src 192.168.***.*** metric 600 
192.168.***.** dev wlp3s0 proto static scope link metric 600 

ipv4.neverdefault=yes除了推送的路由之外,网络管理器不创建第二个默认网关(与上面相同,没有第一行)。

openvpn在终端中,除了推送的路由之外,不创建辅助默认网关:

default via 192.168.***.** dev wlp3s0 proto dhcp metric 600 
10.*.*.*/24 dev tun0 proto kernel scope link src 10.*.*.* 
169.254.0.0/16 dev wlp3s0 scope link metric 1000 
172.**.***.*/24 via 10.*.*.* dev tun0 
192.168.*.*/24 via 10.*.*.* dev tun0 
192.168.*.*/24 via 10.*.*.* dev tun0 
192.168.***.*/24 dev wlp3s0 proto kernel scope link src 192.168.***.*** metric 600 

2.DNS服务器

ipv4.neverdefault=no具有覆盖的网络管理器/run/systemd/resolve/resolv.conf:

nameserver 172.**.***.**

网络管理器ipv4.neverdefault=yes不:

nameserver 192.168.***.**
nameserver ****:***:****:****::**

openvpn在终端中将 dns 服务器添加到现有服务器中,并添加由远程 dns 服务器提供的域名,如以下定义config.ovpn:

nameserver 192.168.***.**
nameserver ****:***:****:****::**
nameserver 172.**.***.***
search <domainToResolveWithRemoteSiteDNS>

如果您知道可以在网络管理器中更改哪些选项以config.ovpn像 openvpn 终端客户端那样处理,我将很高兴听到您的想法。

谢谢,瓦伦丁

openvpn networkmanager ubuntu-20.04
  • 2 2 个回答
  • 4891 Views

2 个回答

  • Voted
  1. Best Answer
    Valentin
    2020-12-19T07:17:25+08:002020-12-19T07:17:25+08:00

    经过一些额外的“研究”(主要是反复试验),我能够通过网络管理器成功连接到远程站点,同时仅路由推送路由的流量并使用推送的 dns 服务器。

    1. 将网络管理器中的 vpn 连接设置为neverdefault(如 OP 中所述):

      nmcli c modify <connectionname> ipv4.never-default yes

    2. 设置与dns-search远程站点内部域的连接:

      nmcli c modify <connectionname> ipv4.dns-search <domainname>

    此选项使 networkmanager 以某种方式run/systemd/resolve/resolv.conf再次添加 DNS 服务器(添加,而不是覆盖),尽管ipv4.never-default处于活动状态。

    或者,<domainname>可以替换为~.which 将导致覆盖,run/systemd/resolve/resolv.conf从而使推送的 DNS 服务器成为唯一回答所有 dns 请求的服务器。

    • 7
  2. CRTLBREAK
    2021-09-25T06:20:14+08:002021-09-25T06:20:14+08:00

    谢谢@Valentin!
    您的解决方案是正确的!
    在我使用 Ubuntu 20.04 客户端连接到 20.04 服务器的情况下,也使用 gnome-network-manager openvpn 选项,没有必要设置 dns-search - 只有从不默认选项。
    为了允许文件夹/网络(samba)连接,我还必须在我的服务器上编辑 smb.conf 文件的“网络”指令下的“接口”选项,如下所示

    interfaces = 127.0.0.0/8 eth0
    interfaces = 127.0.0.0/8 enp2s0
    interfaces = X.X.X.X/XX enp2s0
    

    最后一行添加了 XXXX/XX 是 IP 地址范围的 CIDR 表示法,该 IP 地址范围将由同一 openvpn 服务器分配。

    • 0

相关问题

  • OpenVPN:在哪里生成私钥?

  • 将 iPhone 连接到 OpenVPN

  • OpenVPN 的 Linux IP 转发 - 正确的防火墙设置?

  • 最好的点对点 VPN?

  • 通过 VPN 使您的打印机可用的最佳方法是什么?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve