![OpenVPN 到主机分接设备的 MTU 非常大](https://linux22.com/image/614543/OpenVPN%20%E5%88%B0%E4%B8%BB%E6%9C%BA%E5%88%86%E6%8E%A5%E8%AE%BE%E5%A4%87%E7%9A%84%20MTU%20%E9%9D%9E%E5%B8%B8%E5%A4%A7.png)
问题
为了满足以下条件,我需要的最少服务器和客户端配置指令集是什么?
- 虚拟第 2 层以太网网络不会与任何其他接口桥接。
- VPN 客户端可以与任何其他 VPN 客户端交换帧。
- 不需要 DHCP(VPN 内不使用 TCP/IP)
- VPN 上的所有流量都将是以太网广播(实际上没有 3 层以上的网络)
- 虚拟网络的 MTU 需要比底层网络的 MTU 高得多,并且这对于 VPN 内的节点应该是透明的。OpenVPN 可以自由地在 VPN 之外对数据包进行分段——我认为这是通过和
fragment
指令启用的tun-mtu
。使用这些选项的开销不是问题。(目标 MTU 是2360) - 网络安全不是问题——它的目的是严格对于物理上彼此不接近的节点来说,它是一个完全软件以太网链路。
我已完成哪些工作?
我对 OpenVPN 有丰富的经验,因此我很有信心我已经掌握了基础知识。但是,我似乎无法确定较大的 MTU 大小要求。VPN 上的客户端可以连接,如果我配置 TCP/IP 进行测试,则所有客户端都可以相互 ping 对方,除非使用不分段和数据包大小高于 1472 进行 ping 测试。日志没有显示任何明显的信息。
请参阅以下配置文件。
服务器配置:
mode server
port 1195
proto udp
dev tap
tun-mtu 2360
fragment 1500
comp-lzo
max-clients 200
client-to-client
ca special-net/ca.crt
cert special-net/sn-server.crt
key special-net/sn-server.key
dh special-net/dh1024.pem
status special-net/status.log
tls-server
tls-auth ta.key 0
auth-user-pass-verify /bin/true via-env
duplicate-cn
username-as-common-name
user nobody
group nogroup
persist-key
persist-tun
verb 4
客户端配置:
client
remote <redacted> 1195
proto udp
dev tap
tun-mtu 2360
fragment 1500
ca special-net/ca.crt
cert special-net/sn-client.crt
key special-net/sn-client.key
tls-auth special-net/ta.key 1
auth-user-pass special-net/user.txt
ns-cert-type server
nobind
user nobody
group nobody
persist-key
persist-tun
comp-lzo
verb 3
resolv-retry infinite
为什么我使用 OpenVPN 时会出现奇怪的事情?
我需要一种方法分发(而不是简单的捕获) 监听站观察到的原始 802.11 帧。我打算通过让监听站将每个 802.11 帧原样传输到 VPN 来实现这一点,但要添加以太网报头。以太网报头将只是一个以太网广播,然后 OpenVPN 将分发它。802.11 数据报的最大帧大小为 2346 个八位字节,因此我想要的 MTU 为 2360(以太网报头的 14 个额外字节)。
答案1
灵感一夜之间涌现。看来该tun-mtu
指令只是向 OpenVPN 告知 MTU,并不会导致 OpenVPN 在 Tap 设备本身上设置 MTU。手动设置 Tap 接口上的 MTU 使 VPN 客户端能够发送和接收数据包,而无需分段,最多可达到我要求的 2360 字节。
ip link set tap0 mtu 2360
我直接在每个客户端和服务器上设置 MTU 。