Minecraftサーバを立ててSwitchからつなぐために、Ubuntu上にLAN内だけのDNSサーバをたてる
2024-05-28 00:28:44
ローカルPCにMinecraftのサーバを立てて、
Nintendo Switchからアクセスしてできるようにしたかったんだけど、
SwitchはDNSサーバを騙さないと、繋げないということだったので、
ローカルPCであるUbuntu 22.04LTSに、
簡易DNSサーバを立てて、そこにアクセスしてもらうようにする。
Minecraftサーバ立てたり、実際につなぎにくるまでの詳細は別途書く予定。
環境情報
$ cat /etc/os-release
PRETTY_NAME="Ubuntu 22.04.4 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04.4 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy
IPアドレスの固定化
DNSサーバ化するには、
IPアドレスは固定じゃないと色々やりにくい。
(いちいちSwitchのDNS設定を変えるのが面倒)
なので、固定化したいが、
Ubuntu上でやるとなるとnetplanなどで設定しなくてはいけなくて、よく分からなかったので、
Wifiルーター上で設定した。
うちはNuro光なので、ルーターはF660A。
なので、下記を参考にMacアドレスから、UbunutのIPアドレスを192.168.1.8に固定した。
【NURO光ONU】F660AでサーバやGoogleHomeのIPを固定化する - がらぱっぱ
(2024/06/01 追記)
ちなみに、 F660Aはデフォルトではルーターのファイヤーウォールが有効化されていない。
そのため、下記に従って有効にしてある。
NURO光のONUのファイアウォール機能を有効にする方法 | ゆきろぐ
DNSサーバ
といっても、元々Ubunut 22.04LTSに入っているsystemd-resolvedを使う。
ネットを色々探すと、dnsmasqやBind9、Unboundなどを使う情報が溢れかえっているが、
どれもsystemd-resolvedがすでに使っているポート番号53と被るので、
結局systemd-resolvedを止めたりしないといけないみたい。
だけど、そんなに大掛かりにやりたくなかったし、
そもそも、他のを入れなくてもsystemd-resolved自体に名前解決できる機能がすでにあるので、
それをどうにかできないかを検討した。
色々調べて、DNSStubListenerExtraというのを使えばいいことが分かった。
これは、デフォルトではローカルPC用でしかないsystemd-resolvedのスタブリゾルバを、
指定したIPアドレスでも待ち受けるようにするもの。
ということで、systemd-resolvedの設定ファイルである、下記を編集。
$ sudo vi /etc/systemd/resolved.conf
DNSStubListenerExtra=192.168.1.8
を追記して、
$ sudo systemctl restart systemd-resolved
で再起動。
参考
resolved.conf
Debianでルーターを構築 #IPv6 - Qiita
Minecraftのためにドメインを設定
Minecraftの統合版の特集サーバと呼ばれるもののドメインを、
上記DNSサーバを使って、DNSサーバと同じマシンに誘導するため、下記を/etc/hostsファイルに記載。
#minecraft
192.168.1.8 geo.hivebedrock.network
192.168.1.8 play.galaxite.net
192.168.1.8 mco.mineplex.com
192.168.1.8 mco.cubecraft.net
192.168.1.8 play.pixelparadise.gg
192.168.1.8 mco.lbsg.net
192.168.1.8 play.inpvp.net
$ sudo systemctl restart systemd-resolved
で再起動。
ファイヤーウォールでポート開放
(2024/06/01 追記)
下記の、「LAN内のローカルネットワークとはいえ、ポート開放は必要」という記述は間違い。
たしか、どっかで自分で ufw enable をやってファイヤーウォールを有効化していたせいで、
ポート開放が必要だと思い込んでいたみたい。
外から入ってくるわけではないなら、家庭内LANぐらいならファイヤーウォールは無効化しておいてよい。
Ubuntu Desktopのデフォルトでも有効化されてないし。
LAN内のローカルネットワークとはいえ、
ポート開放は必要なので、
DNSサーバのポートである53を開放する。
tcpは使ってないと思うので、udpだけ。
$ sudo ufw allow 53/udp
設定を再読込
$ sudo ufw reload
なお、ポート開放はちょっとドキドキするが、
LANの外にまで開放するわけじゃないから、よしとする。
動作確認
これで、設定ができたので、
同じLAN内の、別マシンから確認してみる。
今回はMacからつないでみた。
$ dig @192.168.1.8 geo.hivebedrock.network
と打ったときに、
〜中略〜
;; ANSWER SECTION:
geo.hivebedrock.network. 0 IN A 192.168.1.8
;; Query time: 0 msec
;; SERVER: 192.168.1.8#53(192.168.1.8) (UDP)
〜中略〜
と出れば成功。
色々調べたおかげで、少ない設定ですんでよかった。
There are currently no comments on this article, be the first to add one below
Add a Comment
Note that I may remove comments for any reason, so try to be civil. If you are looking for a response to your comment, either leave your email address or check back on this page periodically.