追加読書

追加読書

NetworkManagerを使用してリモートVPNに接続し、Xubuntu 20.4でopenconnect(Cisco Anyconnect)を接続します。 VPN内部サービスのDNS解決を除いて、すべてがうまく機能します。

リモートVPNゲートウェイは、次のsyslog出力に示すようにプライベートDNSサーバーを転送します(少し短縮され、匿名化されています)。

... NetworkManager[701]: <info>  [..] vpn-connection[...]: VPN connection: (IP Config Get) reply received.
... NetworkManager[701]: <info>  [..] vpn-connection[...]: VPN connection: (IP4 Config Get) reply received
... NetworkManager[701]: <info>  [..] vpn-connection[...]: Data: VPN Gateway: 195.xxx.xxx.xxx
... NetworkManager[701]: <info>  [..] vpn-connection[...]: Data: Tunnel Device: "vpn0"
... NetworkManager[701]: <info>  [..] vpn-connection[...]: Data: IPv4 configuration:
... NetworkManager[701]: <info>  [..] vpn-connection[...]: Data:   Internal Address: 10.57.0.188
... NetworkManager[701]: <info>  [..] vpn-connection[...]: Data:   Internal Prefix: 8
... NetworkManager[701]: <info>  [..] vpn-connection[...]: Data:   Internal Point-to-Point Address: 10.57.0.188
... NetworkManager[701]: <info>  [..] vpn-connection[...]: Data:   Static Route: 10.0.0.0/8   Next Hop: 0.0.0.0
... NetworkManager[701]: <info>  [..] vpn-connection[...]: Data:   Internal DNS: 10.240.4.62
... NetworkManager[701]: <info>  [..] vpn-connection[...]: Data:   Internal DNS: 10.240.4.60
... NetworkManager[701]: <info>  [..] vpn-connection[...]: Data:   DNS Domain: 'xxx.yyy.global'
... NetworkManager[701]: <info>  [..] vpn-connection[...]: Data: No IPv6 configuration
... NetworkManager[701]: <info>  [..] vpn-connection[...]: Data: Login Banner:
... NetworkManager[701]: <info>  [..] vpn-connection[...]: Data: -----------------------------------------
... NetworkManager[701]: <info>  [..] vpn-connection[...]: Data: xxxx
... NetworkManager[701]: <info>  [..] vpn-connection[...]: Data: -----------------------------------------
... NetworkManager[701]: <info>  [..] vpn-connection[...]: VPN plugin: state changed: started (4)
... NetworkManager[701]: <info>  [..] vpn-connection[...]: VPN connection: (IP Config Get) complete

NetworkManager は、DNS サーバーのアドレスと DNS ドメインを systemd-resolved に正しく渡します。

% systemd-resolve --status
Global
[...]

Link 3 (vpn0)
      Current Scopes: DNS                
DefaultRoute setting: yes                
       LLMNR setting: yes                
MulticastDNS setting: no                 
  DNSOverTLS setting: no                 
      DNSSEC setting: no                 
    DNSSEC supported: no                 
  Current DNS Server: 10.240.4.62        
         DNS Servers: 10.240.4.62        
                      10.240.4.60        
          DNS Domain: xxx.yyy.global

Link 2 (ens33)
[...]        

ただし、VPNで解決する必要があるURLをpingする場合は機能しません。

% ping foo.bar.com
ping: foo.bar.com: Name or service not known

Wiresharkを使用して状況を確認し、DNSクエリに問題があるかどうかを確認してください。理由はわかりませんが、systemd-resolvedはqueryではなく、「DNSドメイン」(実際にはわからない)からのfoo.bar.comクエリです。foo.bar.com.xxx.yyy.global

ワイヤーシャークのスクリーンショット

他のシステム(同僚)では、DNSクエリは正しく機能します(DNSドメインが接続されていません)。重要な違いは(私の考えでは)彼はresolvconf代わりにへのシンボリックリンクがあるsystemd-resolvedのでそうです。/etc/resolv.conf/run/resolvconf/resolv.conf/run/systemd/resolve/stub-resolv.con

誰かがsystemd-resolvedで何が起こっているのか、正しいDNSクエリを生成するように設定できる方法を説明できますか?

ベストアンサー1

%ping foo.bar.com 

これは、人間が読むことができる完全修飾ドメイン名の形式ではありません。人間が読める形式で正規化されたドメイン名はピリオドで終わります。ドメイン名システム自体は常に完全修飾ドメイン名に対して(仮想的に)機能します。したがって、アプリケーションに接続されたDNSクライアントライブラリは、ユーザーがアプリケーションに提供した名前をDNSルックアップに使用する前に完全修飾名に変換します。ここで扱うには、あまりにも多くの方法でこれを行います。特定のシステムでは、1つの方法は設定された「ドメイン」サフィックスを追加することです。

%ping foo.bar.com. 

これが完全修飾ドメイン名をpingプログラムに渡す方法です。

追加読書

おすすめ記事