概要
リモートデスクトップアプリのNoMachineをOrbStack上のUbuntuにインストールしてGUI操作できるようにしたところ、以下の3つの問題が連鎖して発生しました。
| No. | 症状 | 原因 | 解決方法 |
|---|---|---|---|
| 1 | インターネット接続不可 | ConnMan(connmand)がsystemd-networkdと競合 | systemctl mask connman |
| 2 | NoMachineサーバー一覧からUbuntuが消えた | トラブルシュート中にnxserverをdisableしていた | systemctl enable/start nxserver |
| 3 | FirefoxでWebサイトにアクセスできない |
/etc/resolv.confのsymlinkが壊れDNS不能に |
/etc/orbstack/resolv.confを手動作成 |
それぞれの問題の解決方法を記載します。
問題1:インターネット接続不可
症状
$ ping -c 3 8.8.8.8
From 192.168.139.49 icmp_seq=1 Destination Host Unreachable
調査
ip route show で異常なデフォルトルートを発見:
default dev eth0 scope link ← 異常(metric 0)
default via 192.168.139.1 dev eth0 proto dhcp metric 100 ← 正常
scope link のルートが metric 0 で優先されるため、カーネルが8.8.8.8に対してもARPを直接投げてしまいゲートウェイを経由できない状態でした。
ip monitor route と journalctl で犯人を特定:
connmand[266]: eth0 {del} route 0.0.0.0 gw 0.0.0.0 scope 253 <LINK>
connmand[266]: eth0 {add} route 0.0.0.0 gw 0.0.0.0 scope 253 <LINK>
削除した瞬間に connmand が即座に再追加 していました。
根本原因
NoMachineのインストール時に ConnMan(connmand) が依存関係として導入されました。
OrbStackはsystemd-networkdでネットワークを管理しているため、両者が競合しconnmandが異常ルートを追加し続けたのが原因です。
解決手順
# connmandを停止・無効化・mask(再有効化も防ぐ)
sudo systemctl stop connman
sudo systemctl disable connman
sudo systemctl mask connman
# systemd-networkdでDHCPを再取得
sudo systemctl restart systemd-networkd
# 疎通確認
ping -c 3 8.8.8.8
確認コマンド
systemctl is-active connman # "inactive" であること
systemctl is-active systemd-networkd # "active" であること
ip route show # "default dev eth0 scope link" が無いこと
問題2:NoMachineサーバー一覧からUbuntuが消えた
症状
問題1が解消してインターネット接続はできるようになりましたが、Mac側のNoMachineクライアントのサーバー一覧にUbuntuが表示されなくなりました。
原因
問題1のトラブルシュート中に実行した sudo systemctl disable nxserver により、再起動後にnxserverが自動起動しなくなっていました。
$ systemctl status nxserver
Active: inactive (dead)
Loaded: disabled
avahi-daemonは正常動作中(ubuntu.local として192.168.139.49をアドバタイズ済み)だったため、nxserverを起動すればサービス検出は自動で回復する状態でした。
解決手順
# nxserverを有効化・起動
sudo systemctl enable nxserver
sudo systemctl start nxserver
# ポートがlistenされているか確認
ss -tlnp | grep 4000
期待される出力:
LISTEN 0 100 0.0.0.0:4000 0.0.0.0:*
LISTEN 0 100 [::]:4000 [::]:*
問題3:FirefoxでWebサイトにアクセスできない
症状
ping 8.8.8.8 は通るが、FirefoxでWebサイトにアクセスできない状態でした。
$ host google.com
;; communications error to 127.0.0.1#53: connection refused
;; no servers could be reached
原因の連鎖
- 問題1の調査中に
systemd-resolvedの有効化を試みたが、OrbStackがmaskしていたため失敗 -
sudo ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.confを実行 - OrbStack管理のsymlinkが上書きされた
- リンク先の
/etc/orbstack/resolv.confが存在せず/etc/resolv.confが死んだ - DNSクエリが誰もlistenしていない
127.0.0.1:53に向かい全て失敗
補足:
OrbStackはsystemd-resolvedをmaskして独自DNSリゾルバ(0.250.250.200)を使う設計のため、systemd-resolvedの有効化は不要かつ有害。
解決手順
# OrbStackのDNS設定ディレクトリとファイルを手動作成
sudo mkdir -p /etc/orbstack
sudo tee /etc/orbstack/resolv.conf << 'EOF'
nameserver 0.250.250.200
options edns0
search .
EOF
# 確認
cat /etc/resolv.conf
getent hosts google.com
確認コマンド
cat /etc/resolv.conf
# → nameserver 0.250.250.200 が表示されること
getent hosts google.com
# → IPアドレスが返ること
最終的な正常構成
| 役割 | サービス | 状態 |
|---|---|---|
| ネットワーク管理・DHCP | systemd-networkd |
active |
| DNS | OrbStack独自リゾルバ(0.250.250.200) |
/etc/orbstack/resolv.conf |
| サービス検出(mDNS) | avahi-daemon |
active |
| リモートデスクトップ |
nxserver(port 4000) |
active |
| ネットワーク管理(競合) | connman |
masked |
| DNS(OrbStackが管理) | systemd-resolved |
masked |
再発防止チェックリスト
NoMachineをOrbStack Ubuntuにインストールした直後に実行:
# 1. connmandが起動していたらmaskする
systemctl is-active connman && sudo systemctl mask connman
# 2. systemd-networkdを再起動してDHCPを正常取得
sudo systemctl restart systemd-networkd
# 3. nxserverが自動起動するか確認
systemctl is-enabled nxserver
# 4. 疎通確認
ping -c 3 8.8.8.8
getent hosts google.com
参考:主要な診断コマンド
# ルーティング異常の確認
ip route show
# ルート変化のリアルタイム監視(犯人特定に有効)
sudo ip monitor route
# どのプロセスがルートを操作しているか
sudo journalctl -f | grep -iE "route|network|connman"
# NICの疎通確認
ping -c 3 192.168.139.1 # ゲートウェイ
ping -c 3 8.8.8.8 # 外部
# ARPテーブル(外部IPにFAILEDが並ぶ場合はscope linkルートが原因)
ip neigh show
# DNSの確認
getent hosts google.com
cat /etc/resolv.conf