是否可以为客户端分配与服务器 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 不兼容。