web-dev-qa-db-ja.com

OpenVPN:すべてのDNSエントリがサーバーからクライアントにプッシュされるわけではありません。 (dnsmasq)

私はこの問題の解決策を見つけようとしていますが、今のところ答えが見つからないので、皆さんが私を助けてくれることを願っています。

Ubuntu 10.04を実行しているサーバーがあり、静的IPアドレスとそれを指すURLがあります(server.foo.comなど)。

このサーバーでは、次の構成でOpenVPNサーバーを実行しています。

port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh1024.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
Push "dhcp-option DNS 10.8.0.1"
;Push "dhcp-option DOMAIN foo.com"
keepalive 10 120
tls-auth ta.key 0
comp-lzo
user nobody
group nogroup
persist-key
persist-tun
status openvpn-status.log
log openvpn.log
verb 1
plugin /usr/lib/openvpn/openvpn-auth-pam.so vpnlogin

クライアントは次のように構成されます。

client
dev tun
proto udp
remote server.foo.com 1194
resolv-retry infinite
nobind
persist-key
persist-tun
auth-user-pass
ca ca.crt
cert server.crt
key server.key
ns-cert-type server
tls-auth ta.key 1
comp-lzo
verb 1
auth-nocache

サーバー構成でわかるように、DNSサーバーも実行されています。このサーバーはdnsmasqサーバーであり、/ etc /dnsmasq.confに次の構成があります。

interface=tun0
listen-address=127.0.0.1
dhcp-authoritative
cache-size=0
no-negcache

/etc/dnsmasq.d/には、URLをこのサーバーにルーティングするファイルがあります。このサーバーはVPNクライアントにプッシュする必要があります。それらの中で最も重要なものは次のとおりです。

address=/server.foo.com/10.8.0.1

このURLは私の公開URLとまったく同じであることに注意してください。テストする他のDNSエントリも作成しました。たとえば、address =/server2.foo.com /10.8.0.1です。

これで、このサーバーでHTTPサービスが実行され、LAN内のユーザーとOpenVPNクライアントのみにHTTPサービスへのアクセスを許可したいと思います。以下を除いて、ufwのすべての着信トラフィックをブロックしました。

To         Action       From
1194       ALLOW        Anywhere
53         ALLOW        10.8.0.0/24
80/tcp     ALLOW        10.8.0.0/24
80/tcp     ALLOW        192.168.0.0/24

ついに私の問題に行き着きました。 OpenVPNクライアントが接続すると、dnsmasqからのDNSエントリがクライアントにプッシュされる必要があります。

ただし、エントリserver.foo.comは明らかに無視され、おそらくパブリックDNSが優先されます。 Firefoxでserver.foo.comと入力するか、LANの外部にあるがVPNに接続しているときにChromeと入力すると、タイムアウトが発生します。10.8.0.1、およびserver2.fooなどの他のエントリ。 comはすべて機能します。

Windows 7 32ビットのtracerouteは、たとえばserver2.foo.comが10.8.0.1に1回ジャンプして送信されることを示していますが、server.foo.comはパブリックDNSサーバーを経由して、パブリック静的IPに接続しようとします。がブロックされるため、タイムアウトが発生します。

私はこれまでにいくつかのことを試しましたが、それでも機能しません。

  1. DNSサーバーを信頼できるものに設定します(上記のdnsmasq.conf:dhcp-authoritativeを参照)。
  2. OpenVPNのserver.confで「dhcp-optionDOMAINfoo.com」をプッシュします。

おそらく非常に短い質問であるため、このような長い投稿をしてすみません。そして、誰かが私を助けてくれることを願っています。

よろしく、マイク。

5
Michael

私はあなたのセットアップが壊れるか、うまくいかないと思います:

OpenVPNクライアント構成は、server.foo.comのパブリックアドレスを使用してOpenVPNサーバーに接続します。このアドレスは、明らかにVPNトンネルを確立する前に検索されます。

Dnsmasq構成でトンネルが確立された後、OpenVPNIPを使用してserver.foo.comのDNSエントリをプッシュしようとしています。 OpenVPNクライアントはそれを無視するか(トンネルを確立するために検索する必要があったためserver.foo.comについてすでに知っているため)、それを尊重し、OpenVPNクライアント構成が今を指しているためトンネルをドロップします存在しないIPアドレス。後者は、server.foo.comのパブリックIPのDNSサーバーのTTL)によっては、OpenVPNセッション中に発生する可能性があります。

TL; DR:基本的に、server.foo.comに関する競合する情報をクライアントに伝えようとしています。私はあなたが考えていることをする良い方法を考えることができません。別の方法として、server.foo.comと同じIPを指す2番目のDNSエントリAレコードvpnserver.foo.comを設定し、それを使用するようにOpenVPN構成を変更することもできます。

1
cjc

非常に遅いですが、考えられる回避策の1つは、すべてのクライアントトラフィックをトンネル経由で迂回させることです(クライアントシナリオで許可されている場合)。サーバーの構成ファイルに次のディレクティブを追加する必要があります。例えば「redirect-gatewaydef1」を押します。詳細については、 ここ を参照してください。この方法では、クライアントはパブリックDNSをチェックしません。

0
Umair Naqvi