web-dev-qa-db-ja.com

ゲートウェイはOpenVPNトンネルを介してDHCP応答から削除されます

ブリッジされたOpenVPNセットアップがあります。これは私のサーバー構成です:

port 1194
proto udp
dev tap0

ca      /etc/openvpn/easy-rsa/keys/ca.crt
cert    /etc/openvpn/easy-rsa/keys/server.crt
key     /etc/openvpn/easy-rsa/keys/server.key
dh      /etc/openvpn/easy-rsa/keys/dh2048.pem

# brtctl upscript
script-security 2
up /etc/openvpn/up.sh

tls-server
server-bridge

keepalive 10 120
comp-lzo
persist-key
persist-tun
status openvpn-status.log
verb 3

サーバーはネットワークAで実行されているDebianマシンで実行され、クライアントはネットワークBのOpenWRTルーターで実行されています。ネットワークAでは、tap0インターフェースはDHCPサーバーとインターネットへのゲートウェイを含むローカルネットワークとブリッジされています。ネットワークBでは、tap0インターフェイスは、DHCPサーバーまたはインターネットアクセスなしで別のネットワークにブリッジされます。 OpenVPNトンネルがネットワークBにインターネットアクセスを提供するという考え方です。

この設定では、OpenVPNサーバーはクライアントが使用するIPアドレスを割り当てません。代わりに、ローカルネットワークのDHCPサーバーがそれを処理できるようにします。これは、ルーティング(TUN)セットアップではなく、ブリッジ(TAP)セットアップであるため機能します。

したがって、DHCPはトンネルを介して機能します。ネットワークB側のクライアントは、ネットワークA側のDHCPサーバーから直接IPアドレスを取得します。問題は、デフォルトゲートウェイがネットワークBのマシンで空であるため、DHCP応答からデフォルトゲートウェイが削除されているように見えることです。

たとえば、これはネットワークBに接続されたWindowsクライアントで得られるものです。

Ethernet adapter Ethernet:

   DHCP Enabled. . . . . . . . . . . : Yes
   Autoconfiguration Enabled . . . . : Yes
   IPv4 Address. . . . . . . . . . . : 192.168.2.123(Preferred)
   Subnet Mask . . . . . . . . . . . : 255.255.255.0
   Lease Obtained. . . . . . . . . . : vrijdag 25 juli 2014 22:49:38
   Lease Expires . . . . . . . . . . : zaterdag 26 juli 2014 10:49:38
   Default Gateway . . . . . . . . . :
   DHCP Server . . . . . . . . . . . : 192.168.2.1
   DNS Servers . . . . . . . . . . . : 8.8.8.8
   NetBIOS over Tcpip. . . . . . . . : Enabled

私はこれを見つけました: https://community.openvpn.net/openvpn/ticket/312#comment:

これは、これが文書化された動作であることを示唆していますが、これを無効にする方法がわかりません。クライアント側でディレクティブroute-nopullを使用してみましたが、効果がないようです。

また、OpenVPNクライアント自体ではなく、OpenVPNクライアントのtap0アダプターでブリッジされたマシンでゲートウェイを正しく取得する必要があるため、redirect-gatewayディレクティブを使用できません。

私のクライアント側の設定は次のとおりです。

config openvpn sample_client
    option enabled 1

    option client 1

    option dev tap

    option proto udp

    list remote "server.com 1194"

    option resolv_retry infinite

    option nobind 1

    option persist_key 1
    option persist_tun 1

    option ca /etc/openvpn/ca.crt
    option cert /etc/openvpn/client.crt
    option key /etc/openvpn/client.key

    option ns_cert_type server

    option comp_lzo yes

    option verb 3

    option route-nopull 1

これはOpenWRTのUCI形式であることに注意してください。

編集:

ログでこれを見つけました:

daemon.notice openvpn(sample_client)[5062]: Extracted DHCP router address: 192.168.2.1

これはまさに私が無効にしたい動作です。

これも見つかりました:

--server-bridgeをパラメーターなしで使用すると、DHCPプロキシモードが有効になり、接続しているOpenVPNクライアントは、OpenVPNサーバー側LANで実行されているDHCPサーバーからTAPアダプターのIPアドレスを受け取ります。 DHCPクライアントとTAPアダプターのバインドをサポートするクライアント(Windowsなど)のみがこのモードをサポートできることに注意してください。オプションのnogwフラグ(詳細)は、ゲートウェイ情報をクライアントにプッシュしないことを示します。

面白い。 nogwしないにしました暗黙的に設定されているのでしょうか?明示的に「設定解除」できますか?

編集:これを見つけました: https://forums.openvpn.net/topic13494.html
同じ問題を抱えている人、1年前のスレッド。答えはありません。

4
Compizfox

OpenVPNのドキュメントによると
server-bridgeはのショートカット式です

mode server
tls-server
Push "route-gateway dhcp"

そして

server-bridge nogwはのショートカット式です

mode server
tls-server

興味深いことにPush "route-gateway dhcp"は、元のDHCPサーバーからのDHCP応答のデフォルトゲートウェイオプションをストライプ化するDHCPプロキシをアクティブにします。これはOpenVPNログで確認できます
daemon.notice openvpn[4879]: Extracted DHCP router address: a.b.c.d

解決策はserver-bridge nogwを使用することであり、DHCP応答にはデフォルトルートオプションが再び含まれます。

4
bjmi

自分でこの問題を抱えていて、便利な解決策なしにこれを見つけただけです。数時間後、私はそれを理解しました!

これを使用するだけです:

モードサーバー

tls-server

そして削除:

サーバーブリッジ

そして、DHCPはクライアントに直接渡されます!

1
Daniel

これをOpenVPNのDHCP(server.conf内)に使用します。

server-bridge 172.18.100.100 255.255.0.0 172.18.100.105 172.18.100.250

どこ:

  • 172.18.100.100はOpenVPNサーバーのIPです
  • 172.18.100.105-172.18.100.250は、クライアントIPの範囲です。

また、OpenVPN(server.conf)でもこれが必要になります。

Push "route 172.18.0.0 255.255.0.0"

それについてです。その後、(クライアント上の)プライベートネットワークから外部に出たい場合は、1つのゲートウェイ(サーバーのIP)を介してすべてのトラフィックを転送するだけで済みます。

0
Zatarra

openvpn server-bridgeオプションはブリッジモードに使用されます。2つのオプションがあり、個別のdhcpサーバーまたはserver-brideオプションを使用します。

  https://openvpn.net/index.php/open-source/documentation/miscellaneous/76-ethernet-bridging.html

サブネット192.168.122.0/24にopenvpnサーバーがある場合、この方法でサーバーブリッジを使用できます

  #ip of my vpn server 192.168.122.9
  #vpn client ip pool
  server-bridge 192.168.122.9 255.255.255.0 192.168.122.20 192.168.122.40

このようにして、私のVPNクライアントはリモートdhcpサーバーを使用せずにリモートサブネットのIPアドレスを取得します

0
c4f4t0r