自宅には多くのネットワーク デバイスがあり、人間が使いやすい方法でネットワーク上でアクセスできるようにしたいと考えています。デバイスにインターネットから直接アクセスできるようにしたくありません。
私のニーズ:
- デバイスには複数の「エイリアス」を設定できます
backup
- 例えば、docker
または のnas
名前 でアクセスできる必要があります- 1つのデバイスで複数のサービスを実行していて、それらを区別し、別のデバイスに移動するオプションを用意したいからです。
- デバイスは、ホームホスト型VPNを使用してリモートからアクセスできる必要があります。
- NASにアクセスして遠隔地からバックアップを実行できるようにしたいからです
- デバイスは、職場のVPNに接続された自宅のワークステーションからアクセスできる必要があります。
- 自宅で仕事をすることもあるので、ローカルネットワークにアクセスしたい
長年にわたり、私は以下の解決策を試してきました。しかし、どれも妥協せずに私のニーズをすべて満たすことはできませんでした。
使用mDNS
これは私の最初の設定です。デバイスは以下からアクセスできます。hostname.local
❓ デバイスには複数の「エイリアス」を設定できます
デバイスごとに複数のmDNS名を持つことも可能かもしれませんが、次の問題のため、それ以上調査したことはありません。
❌ デバイスは、ホームホスト型VPNを使用してリモートからアクセスできる必要があります
mDNS
使用されているプロトコルはVPNbroadcast
接続経由で転送されません。mDNS
デバイスからの応答は VPN クライアントに到達できません。
✅ デバイスは、職場の VPN に接続された自宅のワークステーションからアクセスできる必要があります。
mDNS
これは、VPN を「バイパス」してローカル ネットワークにアクセスするため、正常に機能します。
mDNS
ホームDNS
サーバーの使用
私は自宅で自分のDNS
サーバーをホストしています。これで最初の2つのニーズは解決できるはずです。ただし、サーバー*.local
にレコードを置くことDNS
はお勧めしません。たとえば、dig
警告を出力します。
$ dig docker.local
...
;; WARNING: .local is reserved for Multicast DNS
;; You are currently testing what happens when an mDNS query is leaked to DNS
...
✅ デバイスは複数の「エイリアス」を持つことができます
推奨されませんが、名前は正しく解決されます。
✅ デバイスは、ホームホスト型 VPN を使用してリモートからアクセスできる必要があります
サーバーDNS
は単純なリクエスト応答方式でアクセスされるため、VPN と完全に互換性があります。
❌ デバイスは職場のVPNに接続された自宅のワークステーションからアクセスできる必要があります
これは、ワークステーションが VPN 内の仕事用 DNS を使用しており、(当然ですが) 私の のレコードがないため機能しませんdocker.local
。
DNS
カスタムホーム専用ドメインでホームサーバーを使用する
これは「正しい方法」であるはずです。たとえば、ホーム ドメインを作成しました。myplace
(怪しくなるのを避けるため*.home
) そして、DHCP サーバーがこのドメインをすべてのデバイスに設定できるようにしました。サーバーを適切に使用するという考えでしたDNS
。
✅ デバイスは複数の「エイリアス」を持つことができます
DNS
サーバーに感謝します。
✅ デバイスは、ホームホスト型 VPN を使用してリモートからアクセスできる必要があります
サーバーDNS
は単純なリクエスト応答方式でアクセスされるため、VPN と完全に互換性があります。
❌ デバイスは職場のVPNに接続された自宅のワークステーションからアクセスできる必要があります
これは、ワークステーションが VPN 内の仕事用 DNS を使用しており、(当然ですが) 私の のレコードがないため機能しませんdocker.myplace
。
DNS
パブリックドメインのパブリックサーバーを使用する(現時点では理論上のもののみ)
私もパブリックドメインにお金を払っています。そうしましょう。example.com
アイデアは、例えばdocker.example.com = 192.168.0.17
記録を公開することで、前の解決策の3番目のニーズを解決することです。DNS
✅ デバイスは複数の「エイリアス」を持つことができます
DNS
サーバーに感謝します。
✅ デバイスは、ホームホスト型 VPN を使用してリモートからアクセスできる必要があります
サーバーDNS
は単純なリクエスト応答方式でアクセスされるため、VPN と完全に互換性があります。
✅ デバイスは、職場の VPN に接続された自宅のワークステーションからアクセスできる必要があります。
パブリック ドメインはパブリックDNS
サーバーでホストされているためdocker.example.com
、どこからでも (superuser.com
ドメインのように) 解決できるはずです。
⚠️ ただし、これは安全ではありません:
- すべてのデバイス名と(自宅の)IPアドレスをインターネットに公開します
docker.example.com
自宅のネットワーク外(職場、カフェなど)からアクセスする場合192.168.0.17
、彼らのローカルネットワーク。これはさまざまな形で終わる可能性がある- アドレスが存在しない - 接続が失敗する
- アドレスが存在する - 誰かのデバイスに接続することになるため、非常に危険である可能性があります(例:安全でない接続の場合)
これを行うより良い方法を知っている人はいますか?
答え1
これは、ワークステーションが VPN 内の作業用 DNS を使用しており、(明らかに)docker.myplace のレコードがないため機能しません。
内部ホーム DNS は、OS が分割 DNS をサポートしていれば機能します。たとえば、Linux の systemd-resolved では、<ドメイン、DNS サーバー> のセットが複数 (ネットワーク インターフェイスごとに 1 つ) 存在するため、仕事のドメインには VPN DNS サーバーを使用し、その他すべてにはホーム DNS を使用できます。またはその逆で、".home.arpa" にはホーム DNS を使用し、その他すべてには VPN DNS を使用できます。systemd より前は、dnsmasq または Unbound を設定して同じことを実現することもできました。
(サーバー側の「スプリットブレイン」または「スプリットビュー」DNS と混同しないでください。)
WindowsはDNSサーバーソフトウェアでこれを「条件付き転送」と呼んでいるようです。かもしれない組み込み VPN クライアント (IKEv2) ではサポートされていますが、企業の VPN では許可されない可能性があります。
すべてのデバイス名と(自宅の)IPアドレスをインターネットに公開します
それは実はしかし、問題はありませんか? デバイス名は、まあ、名前です。本質的にプライベートなものであるようには思えません (ただし、これはホーム ネットワークで非常に一般的に行われていた頃の、やや古い考え方かもしれませんが)。また、IP アドレスは、ホーム LAN の外部では意味を持ちません。
ただし、両方を組み合わせることもできます。つまり、docker
ワーク ワークステーションからアクセスする必要がある一部のデバイスにはパブリック DNS 名 ( などの汎用名など) を設定し、その他すべてには内部 DNS を使用します。ほとんどの PC では、複数のドメイン サフィックスを構成できます (DHCP 経由でリストを展開することもできます)。
自宅ネットワーク外(職場、カフェなど)からdocker.example.comにアクセスする場合、ローカルネットワークの192.168.0.17に接続することになります。これはさまざまな方法で終わる可能性があります。
IPv6 は、そのための通常の「解決策」です。ランダムに生成されたプライベート IPv6 プレフィックスには、約 56 個の一意のビットがあり、通常は衝突を回避するのに十分すぎるほどです。