問題はどこから来たのですか?
あなたの多くは、自宅から使用可能なLANへのVPN接続を使用しています。
このおかげで、VPNを接続することで、「あたかもそこにいるかのように」作業中のネットワークで作業できます。
Linuxでの典型的なセットアップはどのようなものですか?
/etc/resolv.confに記述されています(openresolvまたはNetworkManagerを使用)
search local.company.name nameserver 10.0.20.186
ここで、local.company.nameは会社のドメインであり、10.0.20.186はローカル(稼働中のネットワーク)DNSサーバーのIPアドレスです。
仕事はどのように見えますか?
root@t510 0 ~ % ping -c 1 cdash-master PING cdash-master.local.company.name (10.0.20.237) 56(84) bytes of data. 64 bytes from 10.0.20.237: icmp_seq=1 ttl=63 time=214 ms ...
どうした
- 検索により、サフィックスlocal.company.nameがcdash-masterに追加されました
- 実稼働ネットワーク上のDNSサーバーは、cdash-master.local.company.nameを10.0.20.237に変換しました
VPN接続がある限り、すべてが正常に機能します。
2つのVPNを同時に接続し、2つのDNSを登録したかった。1つは稼働中のネットワーク用、もう1つは仮想マシンが回転しているhetznerのローカルネットワーク用です。
それは簡単だと思われるでしょうか? しかし、解決策への道は長く、曲がりくねっていました。
詳細な結果の説明
ワーキングネットワーク
ローカルサブネット-10.0.20.0/24(つまり10.0.20。*-サブネットから)
ドメイン-* .local.company.name
DNSサーバー-10.0.20.186
ping - 1 somename
somenameをsomename.local.company.nameとして定義し、DNS 10.0.20.186を介してsomename.local.company.nameをIPアドレスに変換する必要があります。
VPN接続がオフになっている場合、名前は見つかりません。
hetznerのパーソナルサーバー
彼にとってすべてが少しトリッキーです。
ローカルサブネット-10.10.10.0/24(つまり10.10.10。*-サブネットから)
ドメイン-* .my.domain
ローカルDNSサーバー-10.10.10.253
My.domainサーバーには白いIPアドレスがあり、外部からアクセスできます
サーバー上にはnginxがあり、subdomain.my.domain形式のリクエストをローカルサブネットのマシンにプロキシします。
一方では、ユーザーがブラウザーでsubdomain.my.domainにアクセスすると、レジストラーのDNSサーバーは白いIPアドレスmy.domainを返し、ブラウザーはこのIPアドレスにHTTPリクエストを送信し、nginxはそれをプロキシする場所を見つけます。
一方、VPNを有効にすると、接続は次の形式になります。
ssh subdomain
ローカルサブネットからマシンに直接アクセスする必要があります。
なんで?
とても気持ちがいいです。 私はかつて作業機械をセットアップし、透過的に作業ネットワークと個人ネットワークを歩き回りました。 外では、* .my.domainで、ユーザーは1つのサーバー(パートタイムおよびVPN)のみを表示し、ローカルマシンにアクセスできません。 sshを介して、稼働中のネットワークと個人のネットワークの両方のマシンに直接接続できます。
「待って」、ユーザーは私に言うでしょう。
「単に/etc/resolv.confを書きます」:
search local.company.name my.domain
「そして、すべてが機能します。」
なりません。 各ゾーンでは、local.company.nameとmy.domainが独自のDNSサーバーを登録するために必要です。 resolv.confを使用して、openresolvこの問題は解決されません。
解決策
解決策を見つけるために、数時間Googleと私が知っていた管理者を苦しめなければなりませんでした。
私の投稿はあなたの時間を節約するように設計されています。
したがって、まずバインドを配置する必要があります。 Arch Linuxで動作するマシンがあります:
pacman -S bind systemctl enable named
次に、/ etc / named.confを構成し、そこに追加します。
zone "local.company.name" IN { type forward; forwarders { 10.0.20.186; }; }; include "/usr/share/openvpn/named.conf.my.domain"; zone "." IN { type forward; forwarders { 8.8.8.8; 8.8.4.4; }; };
NetworkManagerを設定するか、/ etc / resolv.confを編集します。 両方の場合の結果は次のようになります。
root @ t510 0 / usr / share / openvpn#cat /etc/resolv.conf
# Generated by NetworkManager search local.company.name my.domain nameserver 127.0.0.1
my.domainのopenvpnスクリプトに次を追加します。
up "/usr/share/openvpn/update-dns-my.domain" down "/usr/share/openvpn/update-dns-my.domain"
スクリプト/usr/share/openvpn/update-dns-my.domainを追加して、バインド設定を更新し、VPN接続の確立後に再起動します。
#!/bin/bash set -eu NAME=/usr/share/openvpn/named.conf.my.domain TEMPLATE=${NAME}.template function restart_bind () { /usr/bin/systemctl restart named } case $script_type in up) cat ${TEMPLATE} > ${NAME} restart_bind ;; down) cat /dev/null > ${NAME} restart_bind ;; esac
/usr/share/openvpn/named.conf.my.domain.templateを追加します
zone "my.domain" IN { type forward; forwarders { 10.10.10.253; }; };
どのように機能しますか?
パーソナルサーバーへのVPN接続を確立する場合:
- openvpnはスクリプト/usr/share/openvpn/update-dns-my.domainを実行します
- ファイル/usr/share/openvpn/named.conf.my.domainのスクリプトは、/ usr / share / openvpn / named.conf.my.domain.templateの内容を書き込みます
- スクリプトはバインドを再開します
- bindは、更新されたファイルからmy.domainゾーン設定を読み取ります
- my.domainゾーンは、ローカルネットワークからのDNSサーバーによって解決されるようになりました(VPN経由でアクセス可能)
VPN接続を切断するとき
- openvpnはスクリプト/usr/share/openvpn/update-dns-my.domainを実行します
- スクリプトは/usr/share/openvpn/named.conf.my.domainの内容をクリアします
- スクリプトはバインドを再開します
- bindは、更新されたファイルからゾーン設定my.domainを読み取ります(ゾーンについては忘れます)
- my.domainゾーンがパブリックDNSに解決されるようになりました
実際にはどのように見えますか?
root@t510 0 /usr/share/openvpn # systemctl start named # bind root@t510 0 /usr/share/openvpn # systemctl start openvpn@waltham # root@t510 0 /usr/share/openvpn # systemctl start openvpn@hetzner # root@t510 0 /usr/share/openvpn # ping -c 1 cdash-master PING cdash-master.local.company.name (10.0.20.237) 56(84) bytes of data. 64 bytes from 10.0.20.237: icmp_seq=1 ttl=63 time=214 ms ... root@t510 0 /usr/share/openvpn # ping -c 1 db PING db.my.domain (10.10.10.200) 56(84) bytes of data. 64 bytes from 10.10.10.200: icmp_seq=1 ttl=63 time=233 ms ... root@t510 0 /usr/share/openvpn # systemctl stop openvpn@hetzner root@t510 0 /usr/share/openvpn # ping -c 1 db PING db.my.domain (white-ip-address) 56(84) bytes of data. 64 bytes from my.domain (white-ip-address): icmp_seq=1 ttl=55 time=124 ms ... root@t510 0 /usr/share/openvpn # systemctl start openvpn@hetzner root@t510 0 /usr/share/openvpn # ping -c 1 db PING db.my.domain (10.10.10.200) 56(84) bytes of data. 64 bytes from 10.10.10.200: icmp_seq=1 ttl=63 time=118 ms ...
このような単純な動作を実現するには、非常に多くの作業を行わなければならなかったことは面白いです。