【踩坑总结】丝滑连接OffSec官方VPN的方法
关注泷羽Sec和泷羽Sec-静安公众号,这里会定期更新与 OSCP、渗透测试等相关的最新文章,帮助你理解网络安全领域的最新动态。后台回复“OSCP配套工具”获取本文的工具。
| 方法对比 | 难度 | 流畅度 | 靶机VPN是否双端 | 流量消耗 | 稳定性 |
|---|---|---|---|---|---|
| 方法一:Tun模式 | ⭐⭐ | 340ms | 仅Kali | 大 | 好 |
| 方法二:允许局域网 | ⭐⭐⭐ | 190ms | Win、Kali双端 | 小 | 差 |
| 方法三:Kali中单独登机 | ⭐⭐⭐ | 200ms | 仅Kali | 中 | 好 |
流畅度测试命令 ping IP -c 10 |grep rtt
方法一:物理机登机场开Tun模式,Kali虚拟机连接靶机VPN
找个机场订阅,需要登机方式的可以后台私信我。

点击左边的“代理”,点击“全局”,设置为全局模式,点击Traffic自动选择最快的节点,考试时候建议手动选择下面有地名的节点,一开始选的哪一个,只选那个,不要换节点,可能会因为节点异地登录引起麻烦。

点击左侧“设置”按钮,打开Tun模式和服务模式,红框里面的建议都打开,其他按钮不要动。服务模式的小盾牌点一下,安装一个组件,没有装的装一下。


除了Clash小猫咪软件,也可以使用V2rayN软件特定版本的tun模式,不要使用新版,新版的tun不稳定。
此时进入Kali虚拟机,查询一下自己的出口节点,确实是机场的节点了,而且ping谷歌的速度也比较快,就说明翻过去了。

下载Kali官方的VPN,复制到Kali虚拟机中。

然后在Kali中使用以下命令连接Kali靶机的VPN。
sudo openvpn universal.ovpn
然后用ifconfig 命令能发现多出来的网卡。

使用如下命令设置以下速率,来保证VPN的传输稳定,如果你的机场够快,下面的命令也可以不设,默认的1500速度也一样的。
sudo ip link set dev tun0 mtu 1250
ip link show tun0
靶场漏端口的情况和机场连接的速度有关,测试下来的经验:
-
极速机场:便宜,拖Docker镜像确实极速,但是干别的不行,Kali的VPN都连不上。
-
龙猫机场:价格中等,拖Docker镜像有点慢,综合来说干什么都可以,就是都有点慢,能连Kali的VPN,但是扫端口略慢。
-
Flower机场:价格是龙猫的两倍,速度很快,连Kali的VPN很丝滑,推荐考试使用。
-
一元机场:白菜价,巨慢,疑似跑路了,节点没几个活的了。
-
自建专线机场:包机,很快,但是也贵,速度看机场在哪里,建议买香港节点,连Kali的VPN很丝滑,推荐考试使用。
总结:这个方法最简单也最直接,但是tun+全局模式会让所有流量都走的机场代理,对于机场流量消耗巨大。还有就是某些国内网站从国外地址翻进来访问也是很慢很慢。
方法二:物理机登机场允许局域网连接,修改universal.ovpn开头
代理规则组依旧是选择全局代理。

系统设置上关闭Tun模式,关闭服务模式,打开“局域网连接”

注意看端口用的时哪一个,这里用的时7897。修改官网下载的VPN文件,在首行加入代理地址
socks-proxy 127.0.0.1 7897
然后再物理机Windows中直接导入OpenVPN GUI软件中,再Windows上连接VPN。

VPN软件中设置代理为“使用配置文件中的设置”

选中VPN名称后右键打开选项,点击连接即可。第一次连接后有概率会重连或断开一次,再次点击重新连接即可。

WIndows下打开也可以看靶机,Kali下也可以。

Windows和Kali上的速率相差不大。

但是使用Nmap有概率扫漏端口。

直接请求的话,还是能请求的。但是连接不稳定,即使物理机到虚拟机的网络设置了不限速,但是再Kali中扫描靶机还是很慢。还有概率断线。

方法三:Kali中用V2rayN命令行连接,Kali直连Vpn
安装V2rayN的Linux版本,复制机场信息到Kali中,在Kali中登录VPN。


扫描端口也不掉包的。

命令参数之间的配合
如果mtu速度、机场速度和Nmap等命令参数配合的不对,可能出现以下情况
- 一扫就是一堆

- 端口漏扫

- 扫的很慢,半天没有反应。
每个人的网络环境不一样,带宽和速度不一样,使用Wifi和使用网线的稳定性和速率也不一样。所以同样的命令参数,别人能用但不代表你的网络环境能用。建议考试时,提前测试考试地点的网络环境或者使用之前练习时候的场景即可。尽量保证网络最优,不要因为漏扫某个关键端口而出现打不进去的情况。如果你怀疑你的网络有问题,建议使用官方网页的My Kali再次验证一下,以官方My Kali的扫描结果为准。
下面是一些网络优化的建议:
自动MTU测试脚本
将以下脚本保存为mtu-test.sh
#!/bin/bash
# 自动化MTU测试脚本 - 支持自定义参数
# 默认参数配置
DEFAULT_TARGET="192.168.116.72"
QUICK_START=1472 # 快速测试起始值
QUICK_END=1200 # 快速测试结束值
QUICK_STEP=-10 # 快速测试步长
FULL_START=1472 # 完整测试起始值
FULL_END=500 # 完整测试结束值
FULL_STEP=-5 # 完整测试步长
TUNNEL_OVERHEAD=40 # 默认隧道包头开销(字节)
# 帮助信息
show_help() {
echo "用法: $0 [选项]"
echo "选项:"
echo " -t <IP地址> 指定测试目标 (默认: $DEFAULT_TARGET)"
echo " -f 使用完整测试范围 (默认使用快速范围)"
echo " -o <字节> 隧道包头开销 (默认: $TUNNEL_OVERHEAD)"
echo " -s <起始值> 自定义测试起始值 (需要 -e 和 -p 配合)"
echo " -e <结束值> 自定义测试结束值"
echo " -p <步长> 自定义测试步长 (必须为负数)"
echo " -h 显示帮助信息"
exit 0
}
# 参数解析
while getopts "t:fho:s:e:p:" opt; do
case $opt in
t) TARGET="$OPTARG" ;;
f) USE_FULL_RANGE=true ;;
o) TUNNEL_OVERHEAD="$OPTARG" ;;
s) CUSTOM_START="$OPTARG" ;;
e) CUSTOM_END="$OPTARG" ;;
p) CUSTOM_STEP="$OPTARG" ;;
h) show_help ;;
*) echo "无效选项: -$OPTARG" >&2; exit 1 ;;
esac
done
# 设置目标
TARGET=${TARGET:-$DEFAULT_TARGET}
# 设置测试范围
if [ -n "$CUSTOM_START" ] && [ -n "$CUSTOM_END" ] && [ -n "$CUSTOM_STEP" ]; then
echo "使用自定义测试范围: $CUSTOM_START -> $CUSTOM_END (步长 $CUSTOM_STEP)"
TEST_START=$CUSTOM_START
TEST_END=$CUSTOM_END
TEST_STEP=$CUSTOM_STEP
elif [ "$USE_FULL_RANGE" = true ]; then
echo "使用完整测试范围: $FULL_START -> $FULL_END (步长 $FULL_STEP)"
TEST_START=$FULL_START
TEST_END=$FULL_END
TEST_STEP=$FULL_STEP
else
echo "使用快速测试范围: $QUICK_START -> $QUICK_END (步长 $QUICK_STEP)"
TEST_START=$QUICK_START
TEST_END=$QUICK_END
TEST_STEP=$QUICK_STEP
fi
# 验证自定义步长
if [ -n "$CUSTOM_STEP" ] && [ "$CUSTOM_STEP" -ge 0 ]; then
echo "错误: 自定义步长必须是负数!" >&2
exit 1
fi
# 计算实际MTU值时需添加头部大小
HEADER_SIZE=28 # IP头(20字节) + ICMP头(8字节)
SUCCESS_SIZE=0
# 设置临时MTU
TEMP_MTU=1250
sudo ip link set dev tun0 mtu $TEMP_MTU
echo "设置临时MTU为$TEMP_MTU用于测试"
# MTU测试函数
test_mtu_range() {
local size=$TEST_START
while [ "$size" -ge $TEST_END ]; do
local packet_size=$((size - HEADER_SIZE))
if [ $packet_size -le 0 ]; then
echo "无效测试大小: $size (结果值: $packet_size)"
size=$((size + TEST_STEP))
continue
fi
echo -n "测试包大小: $size字节 (MTU等效值: $((size + TUNNEL_OVERHEAD))字节)... "
if ping -c 2 -M do -s $packet_size $TARGET >/dev/null 2>&1; then
echo "成功!"
SUCCESS_SIZE=$size
break
else
echo "失败"
fi
# 避免无限循环
if [ $TEST_STEP -eq 0 ]; then
echo "警告: 步长为0可能导致无限循环!"
break
fi
size=$((size + TEST_STEP))
done
}
# 执行测试
echo "开始对$TARGET进行MTU测试..."
test_mtu_range
# 计算结果
if [ "$SUCCESS_SIZE" -gt 0 ]; then
OPTIMAL_MTU=$((SUCCESS_SIZE + TUNNEL_OVERHEAD))
echo "------------------------------------------------------"
echo "测试成功! 最大无分片包大小: $SUCCESS_SIZE字节"
echo "隧道包头开销: $TUNNEL_OVERHEAD字节"
echo "推荐MTU值: $OPTIMAL_MTU"
echo "计算: 包大小($SUCCESS_SIZE) + 开销($TUNNEL_OVERHEAD)"
# 设置最佳MTU
sudo ip link set dev tun0 mtu $OPTIMAL_MTU
echo "已将tun0 MTU设置为$OPTIMAL_MTU"
else
echo "------------------------------------------------------"
echo "测试失败! 未找到有效MTU值"
echo "可能原因:"
echo "1. 目标$TARGET不可达"
echo "2. 测试范围不适用(尝试调整参数)"
echo "3. 网络环境特殊(防火墙阻止ICMP测试)"
# 还原初始设置
sudo ip link set dev tun0 mtu 1500
echo "已还原tun0 MTU为1500"
fi保存后给脚本添加课执行权限,然后通过以下命令测试最佳MTU值。
# 指定目标+完整范围测试
./mtu-test.sh -t 192.168.116.72 -f
# 自定义测试范围
./mtu-test.sh -s 1450 -e 1100 -p -2
# 设置隧道开销(适用于不同VPN协议)
./mtu-test.sh -o 50 # OpenVPN等大包头协议
# 更大步长覆盖宽范围 针对卫星链路优化
./mtu-test.sh -t 192.168.1.100 -s 1500 -e 400 -p -20 -o 60
# 精细步长测试可疑区间
./mtu-test.sh -t 10.8.0.1 -s 1420 -e 1390 -p -1 -o 50隧道开销参考值
| VPN协议 | 推荐开销值 | 包含内容 |
|---|---|---|
| WireGuard | 40-60 | 基本头+加密信息 |
| OpenVPN | 60-100 | IP头+UDP头+OpenVPN封装头 |
| IPsec | 50-80 | ESP头+认证数据+填充 |
| L2TP | 80-120 | IP头+UDP头+L2TP头+PPP头 |
动态计算原理
最终MTU = 最大无分片包大小(ICMP数据+28字节) + 隧道包头开销
Flower机场测试

龙猫机场测试

自建专线测试

可以看到,不同机场能承载的MTU是有差距的,机场之间不同节点也是有差距的。
Nmap 最佳参数确定
理解 MTU、带宽和 Nmap 的 --min-rate 参数之间的关系,关键在于它们如何共同影响网络数据包传输的速率和效率,尤其是在进行网络扫描时。它们之间没有直接的数学公式,但相互影响显著:
-
MTU (Maximum Transmission Unit - 最大传输单元):
- 定义: 指网络链路层能够传输的最大数据帧(或数据包)的大小(以字节为单位)。常见值如以太网的 1500 字节(不含帧头)。
- 作用: 决定了单个数据包能承载的最大有效载荷(Payload)。如果应用层数据超过 MTU,它会被分片(Fragmentation)成多个数据包传输。
- 与扫描的关系: Nmap 发送的探测包大小取决于扫描类型(如 SYN 扫描包很小,UDP 扫描包可能接近 MTU)和选项(如
--data-length)。包的大小直接影响每个包在网络中传输所需的时间和资源。
-
带宽 (Bandwidth):
- 定义: 指网络链路在单位时间内能够传输的最大数据量(以比特/秒为单位,如 Mbps, Gbps)。
- 作用: 这是网络的物理容量限制。它设定了数据流经特定路径的最大速率上限。
- 与扫描的关系: Nmap 扫描产生的总数据流量(所有发送和接收包的大小之和)除以扫描时间不能超过可用带宽(还需要考虑链路上的其他流量)。高带宽链路能承载更快的扫描速率。
-
Nmap 的
--min-rate <packets per second>参数:- 定义: 强制 Nmap 尝试以至少指定的速率(每秒发送的包数)发送探测包。
- 作用: 主要用于加速扫描。它告诉 Nmap 不要低于这个发送速率,即使目标响应缓慢或丢包率高。它直接控制的是发包的速率(包/秒),而不是数据速率(比特/秒)。
- 与扫描的关系: 这是用户主动设置的一个目标速率下限,用于追求速度。但它受到 MTU 和带宽的物理限制。
三者如何相互作用:
-
带宽是总容量的天花板:
- 无论
--min-rate设置得多高,Nmap 实际能达到的数据速率(比特/秒) 绝对不可能超过链路的可用带宽。 - 公式表示:
(平均包大小 in bits) * (实际发包速率 in pps) <= 可用带宽 (in bps) - 关键点:
--min-rate控制的是包/秒 (pps),但带宽限制的是比特/秒 (bps)。包的大小(受 MTU 影响)是连接两者的桥梁。
- 无论
-
MTU 影响包大小,进而影响数据速率:
- 如果 Nmap 发送的探测包很大(接近 MTU),那么即使以中等的
--min-rate(pps) 发送,产生的数据速率 (bps) 也会很高,更容易接近或达到带宽上限。 - 如果 Nmap 发送的探测包很小(如 SYN 扫描包只有 60-70 字节),那么即使设置非常高的
--min-rate(pps),产生的数据速率 (bps) 也可能远低于带宽上限。在这种情况下,瓶颈往往不在带宽,而在操作系统、网卡处理能力或目标响应能力上。
- 如果 Nmap 发送的探测包很大(接近 MTU),那么即使以中等的
-
--min-rate的追求与物理限制的冲突:- 追求高 pps: 用户设置高
--min-rate是为了快速完成扫描(发送更多包/秒)。 - 带宽限制: 如果包足够大,高 pps 会迅速消耗带宽。一旦达到带宽上限,Nmap 就无法再提高 pps(除非包变小,但包大小通常由扫描类型决定)。
- MTU 的间接影响: 大包(接近 MTU)使得在较低 pps 下就达到带宽上限的可能性更高,限制了
--min-rate进一步提升 pps 的空间。小包则允许更高的 pps 而不触及带宽上限。 - 其他限制: 即使带宽允许,过高的
--min-rate还可能超过操作系统或网卡的发送能力上限(PPS 上限),或者被网络设备(防火墙、路由器)的速率限制策略拦截,或者压垮目标主机导致其无法响应或产生大量丢包。
- 追求高 pps: 用户设置高
总结关系:
- 带宽是绝对上限: 它限制了所有流量(包括扫描流量)的最大数据速率 (bps)。
- MTU 影响效率: 它决定了单个包的最大尺寸。包的大小(由扫描类型和 MTU 共同决定)是连接发包速率 (pps - 由
--min-rate控制) 和数据速率 (bps - 受带宽限制) 的关键因子。大包更容易使扫描流量触及带宽上限。 --min-rate是用户目标: 它指定了 Nmap 尝试达到的最低发包速率 (pps)。它的实际效果受到带宽(通过包大小换算成数据速率)以及操作系统、网卡、网络设备能力、目标响应能力和延迟(RTT)的综合限制。
实际应用中的考虑:
- 高速网络(高带宽): 在小包扫描(如 SYN 扫描)中,
--min-rate可以设置得很高(几千甚至几万 pps),因为小包的高 pps 消耗的实际带宽相对较小,瓶颈通常在端点处理能力或网络延迟(RTT)。对于大包扫描(如大负载 UDP 扫描),高--min-rate更容易达到带宽上限。 - 低速网络(低带宽): 即使是中等
--min-rate或小包扫描,也容易达到带宽上限。设置过高的--min-rate不仅无效(实际速率上不去),还可能导致严重拥塞和丢包。 - 优化扫描: 理解网络带宽和典型 MTU 有助于合理设置
--min-rate。目标应该是找到在可用带宽和处理能力范围内尽可能快(高 pps)但不至于引起过度丢包或被防火墙封禁的速率。通常需要根据网络环境和扫描类型进行测试和调整。 - 避免拥塞: 在共享网络或生产环境中扫描时,过高的
--min-rate(尤其在大包情况下)会迅速消耗带宽,影响其他业务。务必谨慎使用并选择非高峰时段。
简言之:--min-rate 设定你想要的速度(包/秒),但你能跑多快,取决于你的车(包大小/MTU)和马路有多宽(带宽),还要考虑交通规则和其他车辆(网络设备、拥塞、延迟、端点性能)。 带宽是硬性限制,MTU 影响单个“货物单元”的大小,而 --min-rate 是你踩油门的力度。
你可以使用简单的乘除法来估算--min-rate的值,也可以使用以下命令来自动计算。
#!/bin/bash
# 安装必要工具
if ! command -v bc &> /dev/null; then
echo "[*] 安装 bc (数学计算器)..."
sudo apt update && sudo apt install -y bc
fi
if ! command -v speedtest-cli &> /dev/null; then
echo "[*] 安装 speedtest-cli..."
sudo apt install -y speedtest-cli
fi
# 获取最佳 MTU
read -p "[?] 输入你测试的最佳 MTU (默认 1500): " MTU
MTU=${MTU:-1500}
# 测试带宽
echo "[*] 正在测试带宽 (可能需要 30 秒)..."
BANDWIDTH_MBPS=$(speedtest-cli --simple | awk '/Download/{print $2}')
if [ -z "$BANDWIDTH_MBPS" ]; then
echo "[!] 带宽测试失败! 手动输入值:"
read -p "[?] 输入你的带宽 (Mbps): " BANDWIDTH_MBPS
else
echo "[+] 测得带宽: ${BANDWIDTH_MBPS} Mbps"
fi
# 选择扫描类型
echo "[?] 选择扫描类型:"
echo " 1) SYN 扫描 (小包, 74 字节)"
echo " 2) UDP 扫描 (大包, MTU 大小)"
read -p "选项 (1/2): " SCAN_TYPE
case $SCAN_TYPE in
1)
PACKET_SIZE=74
echo "[+] 使用 SYN 扫描 (包大小: 74 字节)"
;;
2)
PACKET_SIZE=$((MTU + 18))
echo "[+] 使用 UDP 扫描 (包大小: ${PACKET_SIZE} 字节)"
;;
*)
echo "[!] 无效选项! 使用默认 SYN 扫描"
PACKET_SIZE=74
;;
esac
# 计算理论最大 pps (带宽 Mbps * 1e6 / (包大小 * 8))
THEORETICAL_PPS=$(echo "scale=2; $BANDWIDTH_MBPS * 1000000 / ($PACKET_SIZE * 8)" | bc)
# 计算安全值 (理论值的 50%)
SAFE_PPS=$(echo "scale=0; $THEORETICAL_PPS * 0.5 / 1" | bc)
# 计算首次扫描建议值 (理论值的 70%)
INITIAL_PPS=$(echo "scale=0; $THEORETICAL_PPS * 0.7 / 1" | bc)
# 输出结果
echo -e "\n[+] 计算结果:"
echo "--------------------------------"
echo "带宽: $BANDWIDTH_MBPS Mbps"
echo "MTU: $MTU 字节"
echo "扫描包大小: $PACKET_SIZE 字节"
echo "理论最大速率: $THEORETICAL_PPS pps"
echo "--------------------------------"
echo -e "\n[★] 建议 Nmap 参数:"
echo "安全扫描: nmap --min-rate $SAFE_PPS ..."
echo "快速扫描: nmap --min-rate $INITIAL_PPS ..."
echo -e "\n[!] 提示:"
echo "- 首次扫描建议使用快速扫描值"
echo "- 若遇丢包,降低至安全扫描值"
echo "- 在敏感网络环境中,建议从更低的速率开始"保存后,赋予执行权限即可。
chmod +x nmap-optimizer.sh
# 配合mtu测试脚本使用
./mtu-test.sh -t 192.168.140.72 -f
./nmap-optimizer.sh
此方法给出的参数值比较保守,适合在普通公网环境探测时使用,打靶机Nmap扫描时建议将此参数略高6-8倍。
🔔 想要获取更多网络安全与编程技术干货?
关注 泷羽Sec-静安 公众号,与你一起探索前沿技术,分享实用的学习资源与工具。我们专注于深入分析,拒绝浮躁,只做最实用的技术分享!💻
扫描下方二维码,马上加入我们,共同成长!🌟
👉 长按或扫描二维码关注公众号
或者直接回复文章中的关键词,获取更多技术资料与书单推荐!📚