0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Ubuntu 24.04 で 53番ポートを閉じたい

0
Last updated at Posted at 2026-02-05

Ubuntu 24.04 の環境では初期状態で53番ポートが開いています。
127.0.0.XXX と表示されているとおり、ローカル環境でしかアクセスできない状態ではありますが、ローカルでDNSサーバーを動かす必要もないので、こちらの記事では Ubuntu 24.04 環境における53番ポートの閉じ方について示します。

$ grep PRETTY_NAME /etc/os-release 
PRETTY_NAME="Ubuntu 24.04.3 LTS"

$ ss -l sport = :53 2>/dev/null
Netid      State       Recv-Q      Send-Q           Local Address:Port              Peer Address:Port      Process      
udp        UNCONN      0           0                   127.0.0.54:domain                 0.0.0.0:*                      
udp        UNCONN      0           0                127.0.0.53%lo:domain                 0.0.0.0:*                      
tcp        LISTEN      0           4096             127.0.0.53%lo:domain                 0.0.0.0:*                      
tcp        LISTEN      0           4096                127.0.0.54:domain                 0.0.0.0:*      

関係している設定ファイルは /etc/systemd/resolved.conf なので、対象の設定値である「DNSStubListener」を確認するとコメント状態となっています。
つまり、デフォルト値の「yes」として動作しているようです。

$ grep 'DNSStubListener=' /etc/systemd/resolved.conf 
#DNSStubListener=yes

以下のように「DNSStubListener」を「no」に修正します。

$ sudo cp /etc/systemd/resolved.conf /etc/systemd/resolved.conf.orig
$ sudo vim /etc/systemd/resolved.conf
$ diff /etc/systemd/resolved.conf /etc/systemd/resolved.conf.orig
33c33
< DNSStubListener=no
---
> #DNSStubListener=yes

他に関連するファイルについても確認しておきます。
/run/systemd/resolve ディレクトリ配下に2つのconfファイル(いずれも通常ファイル)が存在します。

$ ls -l /run/systemd/resolve/*.conf
-rw-r--r-- 1 systemd-resolve systemd-resolve 786  2月  5 16:42 /run/systemd/resolve/resolv.conf
-rw-r--r-- 1 systemd-resolve systemd-resolve 920  2月  5 16:42 /run/systemd/resolve/stub-resolv.conf

/run/systemd/resolve/*.conf の内容は /etc/netplan 配下のファイルや /etc/systemd/resolved.conf などを元に「systemd-resolved」により自動生成する仕組みになっています。

$ cat /run/systemd/resolve/resolv.conf |grep -v '^#' |grep -v '^\s*$'
nameserver 192.168.0.1
search .
$ cat /run/systemd/resolve/stub-resolv.conf |grep -v '^#' |grep -v '^\s*$'
nameserver 127.0.0.53
options edns0 trust-ad
search .

この状態で「systemd-resolved」を再起動します。

$ sudo systemctl restart systemd-resolved

以下のコマンドを実行すると何も表示されないので、53番ポートを閉じることができたようです。

$ ss -l sport = :53 2>/dev/null
Netid      State      Recv-Q      Send-Q             Local Address:Port             Peer Address:Port      Process   

しかし、sudoコマンド実行時に以下のエラーが発生してしまいます。

$ sudo ls -l |wc -l
sudo: ホスト akase244-lemur-pro の名前解決ができません: 名前またはサービスが不明です
13

sudoコマンドは「自分が今どのホストで実行されているか」をチェックするようです。
どうやら「DNSStubListener=yes」の状態だと、ローカル環境のホスト名の名前解決を担っていたようなので、 /etc/hosts を以下のように修正します。

$ sudo cp /etc/hosts /etc/hosts.orig
$ diff /etc/hosts /etc/hosts.orig
6d5
< 127.0.1.1	akase244-lemur-pro

この状態で再度sudoコマンドを実行するとエラーが発生しないようになりました。

$ sudo ls -l |wc -l
13

ちなみに 127.0.1.1 についてはこのあたりの記事を読むとよいかと思います。

次に /etc/resolv.conf の「nameserver」の値を確認すると 192.168.0.1 となっています。

$ cat /etc/resolv.conf |grep -v '^#' |grep -v '^\s*$'
nameserver 192.168.0.1
search .

Ubuntu 24.04 のデフォルトでは /etc/resolv.conf/run/systemd/resolve/stub-resolv.conf へのシンボリックリンクとなっています。

$ ls -l /etc/resolv.conf 
lrwxrwxrwx 1 root root 39 12月 17 03:03 /etc/resolv.conf -> ../run/systemd/resolve/stub-resolv.conf

man resolv.conf を実行すると「nameserver」は最大で3件まで指定できるようです。

$ man resolv.conf
・
・
       nameserver Name server IP address
              Internet  address of a name server that the resolver should query, either an IPv4 address (in dot nota‐
              tion), or an IPv6 address in colon (and possibly dot) notation as per RFC 2373.  Up to MAXNS (currently
              3, see <resolv.h>) name servers may be listed, one per keyword.  If there are multiple servers, the re‐
              solver library queries them in the order listed.  If no nameserver entries are present, the default  is
              to  use  the name server on the local machine.  (The algorithm used is to try a name server, and if the
              query times out, try the next, until out of name servers, then repeat trying all the name servers until
              a maximum number of retries are made.)
・
・

ということで、以下のアドレスを「nameserver」として指定したいと思います。

上記の値は /etc/systemd/resolved.conf 内にも「Some examples of DNS servers〜」と説明が記載されています。

$ cat /etc/systemd/resolved.conf
・
・
[Resolve]
# Some examples of DNS servers which may be used for DNS= and FallbackDNS=:
# Cloudflare: 1.1.1.1#cloudflare-dns.com 1.0.0.1#cloudflare-dns.com 2606:4700:4700::1111#cloudflare-dns.com 2606:4700:4700::1001#cloudflare-dns.com
# Google:     8.8.8.8#dns.google 8.8.4.4#dns.google 2001:4860:4860::8888#dns.google 2001:4860:4860::8844#dns.google
# Quad9:      9.9.9.9#dns.quad9.net 149.112.112.112#dns.quad9.net 2620:fe::fe#dns.quad9.net 2620:fe::9#dns.quad9.net
・
・

以下のように /etc/systemd/resolved.conf の「DNS」を修正します。

$ sudo vim /etc/systemd/resolved.conf
$ diff /etc/systemd/resolved.conf /etc/systemd/resolved.conf.orig
24c24
< DNS=1.1.1.1 8.8.8.8 9.9.9.9
---
> #DNS=
33c33
< DNSStubListener=no
---
> #DNSStubListener=yes

「systemd-resolved」を再起動します。

$ sudo systemctl restart systemd-resolved

/etc/resolv.conf を確認すると、「Too many DNS servers configured〜」というエラーが表示されるようになってしまいました。
これは man resolv.conf に記載のあった「Up to MAXNS (currently 3, see )」の値を超えて、4件の「nameserver」の指定があるためと思われます。

$ cat /etc/resolv.conf 
・
・
nameserver 1.1.1.1
nameserver 8.8.8.8
nameserver 9.9.9.9
# Too many DNS servers configured, the following entries may be ignored.
nameserver 192.168.0.1
search .

resolvectl status を実行すると nameserver 192.168.0.1 と表示されていることから恐らく家庭内LANのDHCPサーバーから取得したものだと予想できます。

$ resolvectl status
Global
         Protocols: -LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
  resolv.conf mode: uplink
Current DNS Server: 1.1.1.1
       DNS Servers: 1.1.1.1 8.8.8.8 9.9.9.9

Link 2 (enxXXXXXXXXXXXX)
    Current Scopes: DNS
         Protocols: +DefaultRoute -LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
Current DNS Server: 192.168.0.1
       DNS Servers: 192.168.0.1

Link 3 (wlpXXXX)
    Current Scopes: none
         Protocols: -DefaultRoute -LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported

Link 4 (docker0)
    Current Scopes: none
         Protocols: -DefaultRoute -LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported

なので、関係しそうな /etc/netplan 配下のファイルに以下の修正を加えます。
この修正によりDHCP(IPv4)用の設定を上書きして、内部IPのDNSを使用しないようにします。

$ sudo cp /etc/netplan/90-NM-XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX.yaml /etc/netplan/90-NM-XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX.yaml.orig
$ sudo vim /etc/netplan/90-NM-XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX.yaml
$ sudo diff /etc/netplan/90-NM-XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX.yaml /etc/netplan/90-NM-XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX.yaml.orig
9,10d8
<       dhcp4-overrides:
<         use-dns: false

設定を反映します。

$ sudo netplan apply

** (generate:7526): WARNING **: 23:26:26.740: Permissions for /etc/netplan/01-network-manager-all.yaml are too open. Netplan configuration should NOT be accessible by others.

** (process:7524): WARNING **: 23:26:27.001: Permissions for /etc/netplan/01-network-manager-all.yaml are too open. Netplan configuration should NOT be accessible by others.

** (process:7524): WARNING **: 23:26:27.116: Permissions for /etc/netplan/01-network-manager-all.yaml are too open. Netplan configuration should NOT be accessible by others.

今回の修正とは直接関係はありませんが /etc/netplan/01-network-manager-all.yaml のパーミッションが緩いと警告が表示されたので、権限を変更しておきます。

$ ls -l /etc/netplan/01-network-manager-all.yaml
-rw-r--r-- 1 root root 104  8月  6  2025 /etc/netplan/01-network-manager-all.yaml

$ sudo chmod 600 /etc/netplan/01-network-manager-all.yaml

$ ls -l /etc/netplan/01-network-manager-all.yaml
-rw------- 1 root root 104  8月  6  2025 /etc/netplan/01-network-manager-all.yaml

念の為にもう一度 netplan apply を実行すると、今度は警告が表示されずに反映されたようです。

$ sudo netplan apply

「systemd-resolved」を再起動します。

$ sudo systemctl restart systemd-resolved

resolvectl status を実行すると Current DNS Server の項目は表示されなくなりましたが、まだ DNS Servers: 192.168.0.1 が表示されている状態です。

$ resolvectl status
Global
         Protocols: -LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
  resolv.conf mode: uplink
       DNS Servers: 1.1.1.1 8.8.8.8 9.9.9.9

Link 2 (enxXXXXXXXXXXXX)
    Current Scopes: DNS
         Protocols: +DefaultRoute -LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
       DNS Servers: 192.168.0.1

Link 3 (wlpXXXX)
    Current Scopes: none
         Protocols: -DefaultRoute -LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported

Link 4 (docker0)
    Current Scopes: none
         Protocols: -DefaultRoute -LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported

netplan の設定ファイルの「renderer」を確認すると「NetworkManager」と表示されます。

$ sudo grep renderer /etc/netplan/90-NM-*.yaml
/etc/netplan/90-NM-XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX.yaml:      renderer: NetworkManager
/etc/netplan/90-NM-ZZZZZZZZ-ZZZZ-ZZZZ-ZZZZ-ZZZZZZZZZZZZ.yaml:      renderer: NetworkManager

「NetworkManager」では netplan の設定ファイル内の以下の記述が効いていないような挙動に見えます。

      dhcp4-overrides:
        use-dns: false

Linuxには「NetworkManager」と「systemd-networkd」というネットワーク管理ツールがあり、以下のとおり現在操作している環境では「NetworkManager」が動作しているようです。

$ sudo systemctl is-active systemd-networkd
inactive

$ sudo systemctl is-active NetworkManager
active

「NetworkManager」用のCLIである nmcli を使って、ネットワークインターフェースを表示します。

$ nmcli connection show 
NAME                UUID                                  TYPE      DEVICE          
Wired connection 1  XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX  ethernet  enxXXXXXXXXXXXX 
lo                  YYYYYYYY-YYYY-YYYY-YYYY-YYYYYYYYYYYY  loopback  lo              
docker0             ZZZZZZZZ-ZZZZ-ZZZZ-ZZZZ-ZZZZZZZZZZZZ  bridge    docker0         
AA-AAAA_AAAA        AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA  wifi      --              
BBBBB-BBBBBB        BBBBBBBB-BBBB-BBBB-BBBB-BBBBBBBBBBBB  wifi      --              

以下のコマンドを実行してネットワークインターフェース毎に「ipv4.ignore-auto-dns」を設定します。
コマンドの引数として与えるネットワークインターフェース名には「NAME」や「UUID」の値が指定できます。

$ sudo nmcli connection modify "NAME" ipv4.ignore-auto-dns yes
$ sudo nmcli connection modify "UUID" ipv6.ignore-auto-dns yes

設定の変更作業が完了したら、ネットワークインターフェースを一旦非アクティブ化して再度アクティブ化を行います。

$ sudo nmcli connection down "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
接続 'Wired connection 1' が正常に非アクティブ化されました (D-Bus アクティブパス: /org/freedesktop/NetworkManager/ActiveConnection/3)

$ sudo nmcli connection up "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
接続が正常にアクティベートされました (D-Bus アクティブパス: /org/freedesktop/NetworkManager/ActiveConnection/4)

/etc/resolv.conf を確認すると nameserver 192.168.0.1 の行が表示されなくなり、「Too many DNS servers configured〜」のエラーも消えました。

$ cat /etc/resolv.conf |grep -v '^#' |grep -v '^\s*$'
nameserver 1.1.1.1
nameserver 8.8.8.8
nameserver 9.9.9.9
search .

resolvectl status を実行すると、家庭内LANのDNSサーバーのIPアドレス( DNS Servers: 192.168.0.1 )が表示されなくなりました。

$ resolvectl status
Global
         Protocols: -LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
  resolv.conf mode: uplink
Current DNS Server: 1.1.1.1
       DNS Servers: 1.1.1.1 8.8.8.8 9.9.9.9

Link 2 (enxXXXXXXXXXXXX)
    Current Scopes: none
         Protocols: -DefaultRoute -LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported

Link 3 (wlpXXXX)
    Current Scopes: none
         Protocols: -DefaultRoute -LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported

Link 4 (docker0)
    Current Scopes: none
         Protocols: -DefaultRoute -LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported

この作業に取り掛かった際は「使ってないポートを閉じたい」という単純な動機だったのですが、結果として以下のような知見を得ることができました。

  • 「DNSStubListener」の値によって /run/systemd/resolve/stub-resolv.conf が通常ファイルになったり、シンボリックリンクになったりと切り替わる。
  • sudoコマンドの実行時はローカルのホスト名の名前解決を行っている。
  • /run/systemd/resolve/*.conf の内容は以下の情報を元に自動生成される。
    • /etc/netplan 配下のファイル
    • /etc/systemd/resolved.conf
    • nmcliコマンドで設定した各ネットワークインターフェース
  • Linuxのネットワーク管理ツールには「systemd-networkd」と「NetworkManager」が存在する。
  • 「NetworkManager」では netplan の設定ファイル内の指定が効く場合と効かない場合がある。
  • 「NetworkManager」用のCLIとして nmcli が準備されている。
  • resolvectl status を実行することで、どのDNSサーバーを利用しているかといったDNSに関わる情報が把握できる。

やる前は「ちょっとした変更だろう」ぐらいに考えていたのですが、思いがけずこれまで知らなかったことを色々と知る機会になったので、結果的にはやってよかったなと。


関連リンク

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?