#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に移行してください。

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
This site is protected by Turnstile and the Cloudflare Privacy Policy and Terms of Service apply.