ブリッジされた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年前のスレッド。答えはありません。
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応答にはデフォルトルートオプションが再び含まれます。
自分でこの問題を抱えていて、便利な解決策なしにこれを見つけただけです。数時間後、私はそれを理解しました!
これを使用するだけです:
モードサーバー
tls-server
そして削除:
サーバーブリッジ
そして、DHCPはクライアントに直接渡されます!
これをOpenVPNのDHCP(server.conf内)に使用します。
server-bridge 172.18.100.100 255.255.0.0 172.18.100.105 172.18.100.250
どこ:
また、OpenVPN(server.conf)でもこれが必要になります。
Push "route 172.18.0.0 255.255.0.0"
それについてです。その後、(クライアント上の)プライベートネットワークから外部に出たい場合は、1つのゲートウェイ(サーバーのIP)を介してすべてのトラフィックを転送するだけで済みます。
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アドレスを取得します