#author("2024-12-20T06:50:42+09:00;2024-12-10T19:12:09+09:00","","") #author("2025-02-26T01:44:13+09:00;2024-12-10T19:12:09+09:00","","") * 宅内DNSプロキシ [#index] * ナニコレ [#k42c2df1] - 様々なOS・デバイスでは旧来の暗号化されていないDNSのまま。 -- Windows11では純正でDNS over HTTPSがサポートされるようにはなりました。 --- ただWindows11は使いたくないので、やっぱり宅内にDNSプロキシ欲しくない? - 今のインターネット上には邪悪なホストがいっぱい居るので、DNSレベルで弾けるようにしたい。 - そこで、宅内にDNSプロキシを置いて、リゾルバまでは暗号化させるための設定方法メモです。 * 前提 [#s078aada] - コマンドから何をしようとしているのか把握出来る人向け。 -- もう完全に自分の備忘録。 - OSにはArchLinuxを使います。 -- RHEL系とかDebian系とかは適宜適当にやってください。 - DNS over QUICを使う場合にはLXCとかのコンテナを使わないでください。 -- 後々出てくるsysctlの設定とかがホスト依存なので。 * 設定 [#q79003c1] - rootにて <pre> [root@arch-dns1 ~]# # パッケージアップデート pacman-key --init pacman-key --populate archlinux pacman-key --init && pacman -Sy archlinux-keyring && pacman -Syu # vimインストール pacman -S vim rm /usr/bin/vi ln -s /usr/bin/vim /usr/bin/vi # SSH鯖インストール pacman -S openssh vi /etc/ssh/sshd_config # PermitRootLoginをyesにする # SSH鯖の起動・有効化 systemctl start sshd systemctl status sshd systemctl enable sshd systemctl status sshd # vimの右クリック動作が気持ち悪いので止める vi .vimrc ---- " デフォルトの設定を読み込む source $VIMRUNTIME/defaults.vim " 右クリックした時の動作を止める set mouse-=a ---- # NTP同期を有効化する timedatectl set-timezone Asia/Tokyo timedatectl set-ntp true # yayのアップデート用に管理用ユーザー追加 useradd -m admin passwd admin usermod -G wheel admin visudo # %wheel ALL=(ALL:ALL) ALL な行のコメントアウトを外す pacman -S --needed git base-devel # 管理用ユーザーにユーザー変更 su - admin </pre> - 管理用ユーザー(admin)にて <pre> [admin@arch-dns1 ~]$ # yay入れてdnsproxyもインストール git clone https://aur.archlinux.org/yay.git cd yay/ makepkg -si cd ~ yay -Syu yay -Sy dnsproxy # rootに戻る exit </pre> - rootにて <pre> [root@arch-dns1 ~]# # dnsproxyの設定を変更する cd /etc/dnsproxy/ cp -p dnsproxy.yaml dnsproxy.yaml.orig vi dnsproxy.yaml # 中身は別の項参照。 # OS純正のsystemd-resolvedを停止・無効化する # これしないと53番ポートをsystemd-resolvedが使い続けてしまう。 systemctl status systemd-resolved systemctl stop systemd-resolved systemctl status systemd-resolved systemctl disable systemd-resolved systemctl status systemd-resolved # DNSproxyを開始・有効化する systemctl status dnsproxy systemctl start dnsproxy systemctl status dnsproxy systemctl enable dnsproxy systemctl status dnsproxy </pre> * 設定内容 [#q9463ce0] - dnsproxy.yaml <pre> bootstrap: - "1.1.1.1:53" - "1.0.0.1:53" listen-addrs: - "0.0.0.0" listen-ports: - 53 max-go-routines: 0 ratelimit: 0 ratelimit-subnet-len-ipv4: 24 ratelimit-subnet-len-ipv6: 64 udp-buf-size: 0 upstream: - "quic://***************" timeout: '10s' ipv6-disabled: true </pre> -- キャッシュ機能も有効にしたいなら以下も追加で。以下はキャッシュに5MB使う例。cache-sizeはbyteなので注意。 <pre> cache: true cache-size: 5242880 cache-optimistic: true </pre> * 動作確認 [#e31ab643] - 任意のデバイスのDNSサーバーを今回設定したのに書き換える。あとDHCPも該当のサーバーに向ける。 - ブラウザとか閉じてからDNSキャッシュをクリアして、そこから適当なサイトが見れるか確認。 - 適当な接続性確認サイトでアップストリームなDNSサーバーを検知出来ていれば尚ハッピー -- https://www.dnscheck.tools * トラブルシューティング [#g1987325] ** failed to sufficiently increase receive buffer size [#k4c36bfb] - DNS over QUICを設定した場合、ログを見てみると、バッファを増やせと出ていたりするかも。 <pre> # journalctl -u dnsproxy Oct 24 10:09:02 arch-dns1 dnsproxy[428]: 2024/10/24 10:09:02.217634 failed to sufficiently increase receive buffer size (was: 208 kiB, wanted: 7168 kiB, got: 416 kiB). See https://github.com/quic-go/quic-go/wiki/UDP-Buffer-Sizes for details. </pre> - 推奨どおり、OSのネットワーク用バッファを増やしましょう。 <pre> vi /etc/sysctl.d/99-sysctl.conf ---- net.core.rmem_max = 7500000 net.core.wmem_max = 7500000 ---- sysctl --system </pre> -- コンテナで動いていると設定出来ないので、ホスト側で色々設定変更してみるかVMに移行してください。