通過 systemd/dbus busctl 在 ppp 連接上設置 DNS
設置:
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 不是一個選項。
我使用的資源(還有更多,但那些是相關的):
問題正在發生,因為網路已經由系統管理。
在相應的 /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