OpenVPN:如何在与服务器LAN相同的子网上发布客户端IP

OpenVPN:如何在与服务器LAN相同的子网上发布客户端IP

是否可以为客户端分配与服务器 LAN 位于同一子网上的 IP 地址?例如,如果服务器的 IP 地址是10.50.1.5,我想为连接的客户端分配同一子网上的 IP。类似10.50.1.200。我希望这将有助于路由,因为我需要连接到内部系统 ( 10.50.1.20),而该系统在将数据包路由回连接的 VPN 客户端计算机时遇到了麻烦。

我当前的配置:

dev tun
proto tcp
port 443
ca /etc/openvpn/easy-rsa/pki/ca.crt
cert /etc/openvpn/easy-rsa/pki/issued/server.crt
key /etc/openvpn/easy-rsa/pki/private/key.key
dh none
ecdh-curve prime256v1
topology subnet
server 10.50.1.248 255.255.255.248
push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"
# Prevent DNS leaks on Windows
push "block-outside-dns"
push "redirect-gateway def1"
client-to-client
keepalive 15 120
remote-cert-tls client
tls-version-min 1.2
tls-crypt /etc/openvpn/easy-rsa/pki/ta.key
cipher AES-256-CBC
auth SHA256
user openvpn
group openvpn
persist-key
persist-tun
crl-verify /etc/openvpn/crl.pem
status /var/log/openvpn-status.log 20
status-version 3
syslog
verb 3

一旦连接,我会得到一个 IP 10.50.1.250,这正是我所期望的,但我无法 ping 10.50.1.1 或访问互联网。

当我在服务器上配置了server 10.8.0.0 255.255.255.0和 iptables NAT 路由时,例如

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

这样做是可行的,但我仍然遇到从内部系统到客户端的路由问题。再次,希望通过将客户端与内部系统放在同一子网中可以解决这个问题。

更新时间:2020-05-19 12:21(太平洋时间):

我在 OpenVPN 服务器上添加了一条 NAT 路由:

iptables -t nat -A POSTROUTING -s 10.50.1.248/29 -o eth0 -j MASQUERADE

执行此操作后,我能够 ping 该地址10.50.1.20(并访问互联网),但我仍然无法从该系统获得响应。当我从客户端跟踪10.50.1.20路由到它时,10.50.1.249路由似乎是正确的,因此问题似乎出在从10.50.1.20 (system) > 10.50.1.250 (VPN client)

有什么建议么?

答案1

“同一子网”意味着该地址在 MAC 级别可访问。但如果中间有路由器(您的 VPN 服务器就是路由器),情况就不一样了。

你仍然可以让这个工作,通过使服务器本身响应这些地址的 ARP 请求。这样,当其他 LAN 主机尝试访问客户端时,它们最终将使用 VPN 服务器的 MAC 地址。

  • 代理个人地址:ip neigh add proxy 10.50.1.250 dev eth0
  • 代理 CIDR 范围:安装帕尔普德守护进程。
  • 代理所有不通过 eth0 路由的内容:(sysctl net.ipv4.conf.eth0.proxy_arp=1可能不推荐)

执行此操作时,请删除所有 NAT 或 MASQUERADE 规则 - 除非万不得已,否则本地网络之间不应存在任何 NAT,尤其是同一子网的两半之间不应存在 NAT。


还有另一种方法——实际以太网桥接。如果您添加dev-mode tap到 OpenVPN 配置中,它将创建完全兼容以太网的“tap”接口,而不是通常的仅限 IP 的“tun”。然后,您可以将“tap0”和“eth0”接口桥接到单个子网中。

这种替代方法的缺点是“点击”模式与移动客户端(Android 或 iOS)不兼容,并且可能与 macOS 不兼容。

相关内容