ローカルDNSサーバーとのいくつかの異なるVPN接続

問題はどこから来たのですか?



あなたの多くは、自宅から使用可能な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 ...
      
      





どうした

  1. 検索により、サフィックスlocal.company.nameがcdash-masterに追加されました
  2. 実稼働ネットワーク上の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接続を確立する場合:

  1. openvpnはスクリプト/usr/share/openvpn/update-dns-my.domainを実行します
  2. ファイル/usr/share/openvpn/named.conf.my.domainのスクリプトは、/ usr / share / openvpn / named.conf.my.domain.templateの内容を書き込みます
  3. スクリプトはバインドを再開します
  4. bindは、更新されたファイルからmy.domainゾーン設定を読み取ります
  5. my.domainゾーンは、ローカルネットワークからのDNSサーバーによって解決されるようになりました(VPN経由でアクセス可能)




VPN接続を切断するとき

  1. openvpnはスクリプト/usr/share/openvpn/update-dns-my.domainを実行します
  2. スクリプトは/usr/share/openvpn/named.conf.my.domainの内容をクリアします
  3. スクリプトはバインドを再開します
  4. bindは、更新されたファイルからゾーン設定my.domainを読み取ります(ゾーンについては忘れます)
  5. 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 ...
      
      





このような単純な動作を実現するには、非常に多くの作業を行わなければならなかったことは面白いです。



All Articles