Debian

通過 systemd/dbus busctl 在 ppp 連接上設置 DNS

  • April 3, 2017

設置:

debian jessie 設備通過 ppp 連接到網際網路

我們使用 systemd-networking 而根本沒有 /etc/network/interface。

systemd-resolved 用於 DNS。

版本:

systemctl --version
systemd 230
+PAM +AUDIT +SELINUX +IMA +APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ -LZ4 +SECCOMP +BLKID +ELFUTILS +KMOD +IDN
armv7l GNU/Linux
kernel 4.4.14-v7+

(版本是來自 jessie-backports 的版本)

這適用於乙太網 + W-Lan,但不適用於 ppp。

原因:自定義掛鉤腳本

0000usepeerdns 000resolvconf

仍在寫入 /etc/resolv.conf 而不是連接到 systemd-resolved 提供的 dbus 伺服器。

所以我試圖讓 PPP 介面具有 DNS 解析,這應該可以通過我讀過的內容通過 DBUS 呼叫 SetLinkDNS 來實現(最後的連結)

獲取介面 ID(在我們的例子中為 5)

ip l
..
5: ppp0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 700 qdisc pfifo_fast state UNKNOWN mode DEFAULT group default qlen 3                                                         
link/ppp    
..

讀對外連結路介面5的目前狀態

busctl introspect org.freedesktop.resolve1 /org/freedesktop/resolve1/link/_35 |grep DNS 
.DNS                                property  a(iay)    0                 -

在介面 5 上使用 1 個 IPV4 地址設置 DNS(以穀歌 DNS 為例)(第三個整數的解釋是什麼?)

busctl call org.freedesktop.resolve1 /org/freedesktop/resolve1 org.freedesktop.resolve1.Manager SetLinkDNS 'ia(iay)' 5 1 2 4 8 8 8 8
Link ppp0 is managed.

讀出值,仍然為空,因此無法插入這些值。

busctl introspect org.freedesktop.resolve1 /org/freedesktop/resolve1/link/_35 |grep DNS 
.DNS                                property  a(iay)    0  

那麼我如何進一步調試它以最終讓它工作呢?

回退到 /etc/network/interfaces 或“正常” /etc/resolv.conf 不是一個選項。

我使用的資源(還有更多,但那些是相關的):

systemd Github 問題跟踪器

freedesktop wiki 網路管理器

jonathanio VPN DNS 問題跟踪器

來自 jonathanio 的 VPN DNS 更改腳本

問題正在發生,因為網路已經由系統管理。

在相應的 /etc/systemd/network/ 文件中禁用 systemd-resolved 的管理重新載入並重新啟動守護程序 systemctl daemon-reload systemctl restart systemd-resolved 使錯誤消息Link ppp0 is managed消失。

我通過閱讀更多內容、在 freenode #systemd irc 頻道中詢問、在那裡獲得一些指針幫助並閱讀原始碼來解決這個問題。

以下將介面 5 上的 DNS 設置為 google DNS

busctl call org.freedesktop.resolve1 /org/freedesktop/resolve1 org.freedesktop.resolve1.Manager SetLinkDNS 'ia(iay)' 5 1 2 4 8 8 8 8

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