OpenVPN 客户端是否可以忽略“ifconfig-push”来更改“tun”设备的 IP 地址?

OpenVPN 客户端是否可以忽略“ifconfig-push”来更改“tun”设备的 IP 地址?

我为连接到在 AWS EC2(CentOS)实例上运行的 OpenVPN 服务器的客户端设置了静态 IP 配置。分配静态 IP 的目的是为每个客户端分配QUOTA使用iptables,以便控制带宽使用情况。

以下是我的配置:

服务器.conf:

mode server
tls-server
dev tun

topology subnet
push "topology subnet"

ifconfig 10.8.1.1 255.255.255.0
push "route-gateway 10.8.1.1"

port 443
proto tcp-server

push "redirect-gateway def1 bypass-dhcp"

ca ca.crt
cert server.crt
key server.key
dh dh2048.pem
tls-crypt tc.key
cipher AES-256-CBC

user nobody
group nobody
persist-key
persist-tun

client-config-dir /etc/openvpn/ccd/

management localhost 7505

在/etc/openvpn/ccd/客户端:

ifconfig-push 10.8.1.2 255.255.255.0

iptables 规则:

-P FORWARD DROP
-A FORWARD -d 10.8.1.2/32 -g client
-A FORWARD -s 10.8.1.2/32 -g client
-A client -m quota --quota 10000000000 -j ACCEPT

客户端.ovpn:

client
dev tun

remote-cert-tls server
cipher AES-256-CBC

pull
resolv-retry infinite

remote xyz.dynu.net 443 tcp-client
nobind

<ca> ... </ca>
<cert> ... </cert>
<key> ... </key>
<tls-crypt> ... </tls-crypt>

客户端包括 Windows、Linux 和 Android 用户。

我的问题是:

  • 是否可以client通过手动配置 IP 地址和路由来使用从服务器推送的IP10.8.1.3来代替?10.8.1.2
  • 如果是,我们该如何防止这种情况发生?

我不喜欢它,topology net30因为它已经过时了,并且会给客户端留下更小的 IP 池。

这里有一个类似的问题:防止 openvpn 客户端更改 tap 设备的 ip但这不适用于tun设备。

一个老话题缺失环节 强制客户端接受 ifconfig-push状态:

当它(OpenVPN 服务器)收到来自特定客户端的数据包时,它会进行反向路径检查,以确认如果要发送到源 IP 地址,它会发送到该客户端。如果不是,它会丢弃数据包。

因此,如果客户端选择不同的 IP 地址,数据包将无法通过。

这种行为是否有记录在某处?这是否适用于最新的 OpenVPN 版本(2.4.6)?

答案1

您发布的旧帖子中 Neil Brown 的引言后面是源代码的引用:

参见multi.c第1605行的注释及其周围的代码。

我认为他指的是现在的评论2569 行

/* make sure that source address is associated with this client */

稍后,在第 2580 行和 2690 行,您可以看到这会导致以下日志消息:

“MULTI:来自客户端 [%s] 的错误源地址,数据包被丢弃”

所以我猜测今天这一说法仍然正确。

为了便于将来参考,“今天”指的是版本 2.4.7。

编辑:

我今天设置了一个测试 OpenVPN 服务器。我还在机器的防火墙中设置了一条规则,以计算来自虚拟接口的所有传入数据包。从客户端连接后,我能够 ping 另一个可通过服务器访问的地址,并且计数器正在递增(即使对于不存在的主机也是如此)。然后我在客户端界面上更改了地址:

ip a add 192.168.1.3/24 dev tun0
ip a del 192.168.1.2/24 dev tun0

我无法再通过该接口 ping 任何内容,计数器也没有增加。看起来客户端仍在通过隧道发送数据包,因为当我在客户端上将详细程度设置为 5 时,我会rW为每个发送的 ping 数据包获得一个。r表示从接口接收的数据包tun(从进程的角度来看openvpn),并且是封装并发送到服务器的数据包。(通常如果有回复,W我也会得到。)Rw这表明数据包被服务器端丢弃,这很好。

我没有在服务器openvpn日志中看到数据包被丢弃,但这可能是因为我的详细程度设置为 3,并且根据D_MULTI_DROPPED仅在 4 及以上时显示。

然后我将地址改回最初分配的地址(无需重新启动连接):

ip a add 192.168.1.2/24 dev tun0
ip a del 192.168.1.3/24 dev tun0

一切又恢复正常,计数器不断增加,现有主机正在响应。

相关内容