我正在终端上或通过网络管理器使用 vpnc 连接到 Lubuntu 15.10 上的公司网络。有时我可以很好地访问内网主机,但突然它们就消失了。然后他们回来了。我没有更改任何设置,我的连接很稳定。这非常令人沮丧。
我通常可以通过他们的 IP 联系到他们,但不能通过他们的主机名。这是相隔仅 5 分钟的 dig 的输出,一次失败,另一次则没有。
; <<>> DiG 9.9.5-11ubuntu1-Ubuntu <<>> some.intranet.host
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 7423
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1280
;; QUESTION SECTION:
;some.intranet.host. IN A
;; ANSWER SECTION:
some.intranet.host. 3500 IN A 10.0.20.107
;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Thu Dec 10 18:46:17 CET 2015
;; MSG SIZE rcvd: 65
; <<>> DiG 9.9.5-11ubuntu1-Ubuntu <<>> some.intranet.host
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 17766
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1280
;; QUESTION SECTION:
;some.intranet.host. IN A
;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Thu Dec 10 19:06:35 CET 2015
;; MSG SIZE rcvd: 49
我不擅长网络设置并且很难调试它。连接到 VPN 时我的 resolv.conf 的内容:
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 127.0.0.1
search intranet.host intranet fritz.box
ifconfig tun0
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:172.16.0.138 P-t-P:172.16.0.138 Mask:255.255.255.0
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1412 Metric:1
RX packets:46575 errors:0 dropped:0 overruns:0 frame:0
TX packets:36452 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:500
RX bytes:45875777 (45.8 MB) TX bytes:4059895 (4.0 MB)
更新:
尽管停用 dnsmasq,我可以在重新启动后看到正在运行的进程,并且我的 resolv.conf 仍然保留 127.0.0.1 作为名称服务器。终止该进程后,我无法再解析网址。我想我需要手动从 resolv.conf 中取出名称服务器?
$ grep dnsmasq /etc/NetworkManager/NetworkManager.conf
#dns=dnsmasq
$ ps aux|grep dnsmas
dnsmasq 1730 0.0 0.0 49580 3052 ? S 16:26 0:00 /usr/sbin/dnsmasq -x /var/run/dnsmasq/dnsmasq.pid -u dnsmasq -r /var/run/dnsmasq/resolv.conf -7 /etc/dnsmasq.d,.dpkg-dist,.dpkg-old,.dpkg-new --local-service
答案1
Ubuntu 出厂dnsmasq
时默认启用。 Dnsmasq 是 1) DNS 缓存代理(为了性能)和 2) DHCP 服务器。我找不到为什么与典型家庭路由器通信的典型家庭用户需要 dnsmasq 来复制路由器提供的这两项服务的原因。
第一步是禁用 dnsmasq:
$ grep dnsmasq /etc/NetworkManager/NetworkManager.conf
#dns=dnsmasq
$ sudo service network-manager restart
$ sudo killall dnsmasq
首先,最好确认您的网络连接保持不变。如果您发现 DNS 性能受到影响,我会感到惊讶。
火起来vpnc
;我也手动运行它,没有 NetworkManager 帮助我。您可能需要将默认路由重新指向您的 VPN。您可以使用以下命令找到 VPN 隧道伪设备ifconfig
:我的名字是tun0
$ sudo route del default ; sudo route add default tun0
我建议将它们保留在一根线上,以防没有默认路由器堵塞您的终端(不应该,但是......)。
上面的第一个代码块只完成一次。如果需要更改默认路由,则每次使用 VPN 时都需要进行更改。我有一个简单的脚本可以完成所有这些工作,我没有在这里发布,因为如果没有更好地理解 NetworkManager,我认为它过于本地化。
答案2
我现在在 Debian bullseye/sid/unstable 下针对相同客户端/VPN 情况的工作设置是从等式中取出 NetworkManager。
删除 NetworkManager(那么您可能无法通过常规托盘图标 GUI 连接到 Wifi!)
sudo apt 删除网络管理器-gnome 网络管理器 sudo apt 安装 dnsmasq
使用简单的自定义 dnsmasq 配置。
文件:/etc/dnsmasq.d/你的名字
# Use my router as default
server=192.168.2.1
# Use some-company dns for intranet hosts
server=/some-company.com/10.49.123.5
server=/.foo/10.49.123.5
可以选择添加这两行以通过日志进行调试:
log-queries
log-dhcp
文档位于:https://wiki.ubuntuusers.de/Dnsmasq/
- 确保
/etc/resolv.conf
不是符号链接并使其指向 dnsmasq。这很重要,因为 vpn 脚本向上/向下脚本可能会尝试更改文件并弄乱连接/断开连接时的配置。
文件:/etc/resolv.con
nameserver 127.0.0.1
YMMV:由于我仍然看到某些内容覆盖了我的 /etc/resolf.conf,因此我在 /etc/dhcp/dhclient.conf 的末尾添加了一行:
supersede domain-name-servers 127.0.0.1;
重启服务
/etc/init.d/networking restart
sudo /etc/init.d/dnsmasq restart
当我连接或未连接到 VPN 时,这最终使其适用于非公司和公司地址。