网关通过OpenVPN隧道从DHCP Reply中被剥离

我有一个桥接OpenVPN的设置。 这是我的服务器configuration:

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 

服务器运行在运行在networkingA中的Debian机器上,客户机运行在networkingB中的OpenWRT路由器上。在networkingA中,tap0接口与本地networking桥接,包含DHCP服务器和通往因特网的网关。 在networkingB上,tap0接口与不具有DHCP服务器或互联网接入的独立networking桥接。 这个想法是,OpenVPN隧道为networkingB提供了互联网访问。

在这个设置中,OpenVPN服务器不分配IP地址供客户端使用。 相反,它只是让本地networking中的DHCP服务器来处理这个问题。 这是有效的,因为这是一个桥接(TAP),而不是路由(TUN)设置。

所以,DHCP在隧道上工作。 networkingB侧的客户端直接从networkingA的DHCP服务器获取IP地址。 问题是它看起来像缺省网关从DHCP答复中被剥离,因为它在networkingB上的机器上是空的。

例如,这是我在连接到networkingB的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:3

这表明这是logging的行为,但我不知道如何禁用这个。 我试图在客户端使用指令route-nopull ,但它似乎没有任何效果。

另外,我不能使用redirect-gateway指令,因为我需要在使用OpenVPN客户端的tap0适配器桥接的机器上获得网关,而不是在OpenVPN客户端本身。

我的客户端configuration如下:

 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 。 难道这是隐式设置或什么的? 我可以明确地“解除”它吗?

编辑:find这个: https : //forums.openvpn.net/topic13494.html
有同样的问题,从一年前的线程。 没有答案。

根据OpenVPN文档
server-bridge是一个快捷expression式

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

server-bridge nogw是一个快捷expression式

 mode server tls-server 

有趣的是, push "route-gateway dhcp"激活一个DHCP代理,从原始DHCP服务器的DHCP响应中除去默认网关选项。 这可以在OpenVPN日志中看到
daemon.notice openvpn[4879]: Extracted DHCP router address: abcd

您的解决scheme将使用服务器桥接nogw和DHCP响应包含默认路由选项。

openvpn服务器桥接选项用于桥接模式,您有两个选项使用单独的DHCP服务器或服务器新娘选项

  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客户端可以在远程子网上获得IP地址,而无需使用远程DHCP服务器

在OpenVPN上使用这个(在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地址
  • 客户端IP的范围是172.18.100.105-172.18.100.250

你还需要OpenVPN(server.conf):

 push "route 172.18.0.0 255.255.0.0" 

就是这样。 之后,只需要通过一个网关(服务器的IP)转发所有stream量,如果你想从私人networking(在客户端)之外。

只是自己有这个问题,发现这个,没有一个有用的解决scheme。 几个小时后,我明白了!

只需使用这个:

模式服务器

TLS服务器

并删除:

服务器桥

而DHCP将直接传递给客户端!