Dns

DNS 暫時因 VPN 地址而失敗

  • August 17, 2020

我正在使用終端上的 vpnc 或通過網路管理器連接到 Lubuntu 15.10 上的公司網路。有時我可以很好地訪問 Intranet 主機,然後它們突然消失了。然後他們回來了。我沒有更改任何設置,否則我的連接很穩定。這非常令人沮喪。

我通常總是可以通過他們的 ip 而不是他們的主機名來聯繫他們。這是 dig 僅相隔 5 分鐘的輸出,一次失敗,另一次失敗。

; <<>> 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

我現在針對 Debian Bullseye/sid/unstable 下的相同客戶端/vpn 情況的工作設置是從等式中取出 NetworkManager。

  1. 刪除 NetworkManager(然後您可能無法通過正常托盤圖示 GUI 連接到 Wifi!)

sudo apt remove network-manager-gnome network-manager sudo apt install dnsmasq 2. 使用簡單的自定義 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/

  1. 確保/etc/resolv.conf不是符號連結並使其指向 dnsmasq。這很重要,因為 vpn 腳本 up/down 腳本可能會嘗試更改文件並在連接/斷開連接時弄亂您的配置。

文件:/etc/resolv.con

nameserver 127.0.0.1

YMMV:因為我仍然看到一些東西覆蓋了我的 /etc/resolf.conf,所以我在 /etc/dhcp/dhclient.conf 的末尾添加了一行:

supersede domain-name-servers 127.0.0.1;                                                                                            
  1. 重啟服務

/etc/init.d/networking restart

須藤 /etc/init.d/dnsmasq restart

當我連接或未連接到 VPN 時,這最終使它適用於非公司和公司地址。

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,我認為它過於本地化。

引用自:https://unix.stackexchange.com/questions/248617