嗨!
我在 Linux 上安装了一个 Openvpn 服务器,并用它来路由来自我的客户端(win7、android、pfsense 等)的所有 ipv4 流量。我终于想真正理解路由的事情了,虽然它能工作,但更多的是因为我的服务器 .conf 是在反复试验后制作出来的 :)
我不明白的是,真正需要的是哪种选项组合 - 除了选项“redirect-gateway def1”(openvpn man 中有解释)之外,这些推送功能还能做什么?我不能省略 redirect-gateway def1 吗?否则隧道的流量将通过隧道路由。。?
当前正在运行的是 server.conf 上的以下一组路由选项(除了其他选项,如 tun 设备、客户端等):
服务器 10.10.0.0 255.255.255.0 #ok,我假设客户端需要找出要获取哪个 IP
推送“redirect-gateway def1”# 我明白了,但它在 android 或 mac 上不起作用——我必须在那里设置一个程序选项“通过 vpn 路由所有网关”,以便隧道充当默认路由
推送“dhcp-option DNS 8.8.8.8”# 因为 dnsmasq 不起作用,我假设我需要通过另一个(google)服务器创建所有 dns
推送“路由 10.10.0.1”# 这有帮助吗?它似乎不会造成任何影响,但这不应该由重定向网关 def1 执行吗?目前,在我的 win7 客户端上,如果我省略这个,它也可以工作。但无论有没有这个选项,我在 win7 中的 tap 设备上都没有默认 ipv4 网关条目,尽管流量是通过隧道路由的。
我不明白的另一件事是,如果客户端获得的 IP 为 10.10.0.6,则 dhcp 设置为 10.10.0.5。但 10.10.0.5 上没有任何东西,这从何而来?
哦,伙计,请帮我理解这一点,我的路由知识很少......谢谢!
附言:当我最终得到这个时,我想解决我收到的常量“身份验证/解密数据包错误:坏数据包 ID(可能是重放):[#961]”错误,已经尝试过片段 1300 mssfix 但似乎没有帮助,虽然 netalyzr 说我的 mtu 是 1376 并且在此选项之前它说我无法发送或接收碎片数据包。我怀疑我的提供商大量使用 udp 数据包。
编辑:这是我的 server.conf
port 123
client-to-client
proto udp
dev tun0
ca *.crt
cert *.crt
key *.key
dh *.pem
server 10.10.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
duplicate-cn
keepalive 10 120
push "redirect-gateway def1"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option gateway 10.10.0.1"
max-clients 5
client-to-client
fragment 1300
mssfix
编辑:路由命令现在很清楚,谢谢,监督了 openvpn man 中的“服务器”部分。
现在我面临以下问题:
为了调试连接(udp 连接总是获得数据包重放),我建立了一个 tcp 隧道(基于上述配置,只需在服务器上切换到 tap0),并且一旦从 openvpn 客户端开始下载,我就会得到以下日志输出:
“MULTI:由于输出饱和 (multi_process_incoming_tun) 导致数据包丢失”
所以我补充道:
tcp 队列限制 128
这导致信息量减少,所以我增加到
tcp 队列限制 256
这会导致连接断开。首先,它输出其中一些:
MBUF:mbuf 数据包丢失
然后
写入 TCPv4_SERVER:管道损坏(代码=32)
然后
连接重置,重新启动 [0]
所以我附加了
bcast 缓冲区 = 4096
结果就是不再有消息,但是速度仍然很慢。另外,我不知道这是否只是对一些小型下载的修复,以及它是否可以在正在进行的下载中稳定运行,或者缓冲区填满并重新连接,因此可能更多的是损坏而不是修复。
当使用 udp 隧道时,我获得了几乎两倍的下载速度,并且反复出现此日志消息:
认证/解密数据包错误:数据包 ID 错误(可能是重放):[#650]
例如,在进行 oakla 速度测试时,我在下载测试中收到大约 3 次重放警告,在上传测试中收到 5-6 次重放警告。
我可以做些什么来进一步改善隧道?谢谢!
编辑:更改标题,使其更符合问题。
编辑:现在使用来自我的 openvpn 服务器的 1 GB 文件来测试下载速度,而不是 oakla,并且我在 tcp 上有 16mbit,到目前为止没有错误编辑:好的,它没有通过隧道路由,而是直接下载 - 我认为这是因为 openvpn 客户端需要直接路由到 openvpn 服务器。