关注泷羽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。
1sudo openvpn universal.ovpn

然后用ifconfig 命令能发现多出来的网卡。

使用如下命令设置以下速率,来保证VPN的传输稳定,如果你的机场够快,下面的命令也可以不设,默认的1500速度也一样的。
1sudo ip link set dev tun0 mtu 1250
2ip link show tun0

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

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

注意看端口用的时哪一个,这里用的时7897。修改官网下载的VPN文件,在首行加入代理地址
1socks-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
1#!/bin/bash
2# 自动化MTU测试脚本 - 支持自定义参数
3
4# 默认参数配置
5DEFAULT_TARGET="192.168.116.72"
6QUICK_START=1472 # 快速测试起始值
7QUICK_END=1200 # 快速测试结束值
8QUICK_STEP=-10 # 快速测试步长
9FULL_START=1472 # 完整测试起始值
10FULL_END=500 # 完整测试结束值
11FULL_STEP=-5 # 完整测试步长
12TUNNEL_OVERHEAD=40 # 默认隧道包头开销(字节)
13
14# 帮助信息
15show_help() {
16 echo "用法: $0 [选项]"
17 echo "选项:"
18 echo " -t <IP地址> 指定测试目标 (默认: $DEFAULT_TARGET)"
19 echo " -f 使用完整测试范围 (默认使用快速范围)"
20 echo " -o <字节> 隧道包头开销 (默认: $TUNNEL_OVERHEAD)"
21 echo " -s <起始值> 自定义测试起始值 (需要 -e 和 -p 配合)"
22 echo " -e <结束值> 自定义测试结束值"
23 echo " -p <步长> 自定义测试步长 (必须为负数)"
24 echo " -h 显示帮助信息"
25 exit 0
26}
27
28# 参数解析
29while getopts "t:fho:s:e:p:" opt; do
30 case $opt in
31 t) TARGET="$OPTARG" ;;
32 f) USE_FULL_RANGE=true ;;
33 o) TUNNEL_OVERHEAD="$OPTARG" ;;
34 s) CUSTOM_START="$OPTARG" ;;
35 e) CUSTOM_END="$OPTARG" ;;
36 p) CUSTOM_STEP="$OPTARG" ;;
37 h) show_help ;;
38 *) echo "无效选项: -$OPTARG" >&2; exit 1 ;;
39 esac
40done
41
42# 设置目标
43TARGET=${TARGET:-$DEFAULT_TARGET}
44
45# 设置测试范围
46if [ -n "$CUSTOM_START" ] && [ -n "$CUSTOM_END" ] && [ -n "$CUSTOM_STEP" ]; then
47 echo "使用自定义测试范围: $CUSTOM_START -> $CUSTOM_END (步长 $CUSTOM_STEP)"
48 TEST_START=$CUSTOM_START
49 TEST_END=$CUSTOM_END
50 TEST_STEP=$CUSTOM_STEP
51elif [ "$USE_FULL_RANGE" = true ]; then
52 echo "使用完整测试范围: $FULL_START -> $FULL_END (步长 $FULL_STEP)"
53 TEST_START=$FULL_START
54 TEST_END=$FULL_END
55 TEST_STEP=$FULL_STEP
56else
57 echo "使用快速测试范围: $QUICK_START -> $QUICK_END (步长 $QUICK_STEP)"
58 TEST_START=$QUICK_START
59 TEST_END=$QUICK_END
60 TEST_STEP=$QUICK_STEP
61fi
62
63# 验证自定义步长
64if [ -n "$CUSTOM_STEP" ] && [ "$CUSTOM_STEP" -ge 0 ]; then
65 echo "错误: 自定义步长必须是负数!" >&2
66 exit 1
67fi
68
69# 计算实际MTU值时需添加头部大小
70HEADER_SIZE=28 # IP头(20字节) + ICMP头(8字节)
71SUCCESS_SIZE=0
72
73# 设置临时MTU
74TEMP_MTU=1250
75sudo ip link set dev tun0 mtu $TEMP_MTU
76echo "设置临时MTU为$TEMP_MTU用于测试"
77
78# MTU测试函数
79test_mtu_range() {
80 local size=$TEST_START
81 while [ "$size" -ge $TEST_END ]; do
82 local packet_size=$((size - HEADER_SIZE))
83 if [ $packet_size -le 0 ]; then
84 echo "无效测试大小: $size (结果值: $packet_size)"
85 size=$((size + TEST_STEP))
86 continue
87 fi
88
89 echo -n "测试包大小: $size字节 (MTU等效值: $((size + TUNNEL_OVERHEAD))字节)... "
90
91 if ping -c 2 -M do -s $packet_size $TARGET >/dev/null 2>&1; then
92 echo "成功!"
93 SUCCESS_SIZE=$size
94 break
95 else
96 echo "失败"
97 fi
98
99 # 避免无限循环
100 if [ $TEST_STEP -eq 0 ]; then
101 echo "警告: 步长为0可能导致无限循环!"
102 break
103 fi
104
105 size=$((size + TEST_STEP))
106 done
107}
108
109# 执行测试
110echo "开始对$TARGET进行MTU测试..."
111test_mtu_range
112
113# 计算结果
114if [ "$SUCCESS_SIZE" -gt 0 ]; then
115 OPTIMAL_MTU=$((SUCCESS_SIZE + TUNNEL_OVERHEAD))
116 echo "------------------------------------------------------"
117 echo "测试成功! 最大无分片包大小: $SUCCESS_SIZE字节"
118 echo "隧道包头开销: $TUNNEL_OVERHEAD字节"
119 echo "推荐MTU值: $OPTIMAL_MTU"
120 echo "计算: 包大小($SUCCESS_SIZE) + 开销($TUNNEL_OVERHEAD)"
121
122 # 设置最佳MTU
123 sudo ip link set dev tun0 mtu $OPTIMAL_MTU
124 echo "已将tun0 MTU设置为$OPTIMAL_MTU"
125else
126 echo "------------------------------------------------------"
127 echo "测试失败! 未找到有效MTU值"
128 echo "可能原因:"
129 echo "1. 目标$TARGET不可达"
130 echo "2. 测试范围不适用(尝试调整参数)"
131 echo "3. 网络环境特殊(防火墙阻止ICMP测试)"
132
133 # 还原初始设置
134 sudo ip link set dev tun0 mtu 1500
135 echo "已还原tun0 MTU为1500"
136fi
保存后给脚本添加课执行权限,然后通过以下命令测试最佳MTU值。
1# 指定目标+完整范围测试
2./mtu-test.sh -t 192.168.116.72 -f
3
4# 自定义测试范围
5./mtu-test.sh -s 1450 -e 1100 -p -2
6
7# 设置隧道开销(适用于不同VPN协议)
8./mtu-test.sh -o 50 # OpenVPN等大包头协议
9
10# 更大步长覆盖宽范围 针对卫星链路优化
11./mtu-test.sh -t 192.168.1.100 -s 1500 -e 400 -p -20 -o 60
12
13# 精细步长测试可疑区间
14./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的值,也可以使用以下命令来自动计算。
1#!/bin/bash
2
3# 安装必要工具
4if ! command -v bc &> /dev/null; then
5 echo "[*] 安装 bc (数学计算器)..."
6 sudo apt update && sudo apt install -y bc
7fi
8
9if ! command -v speedtest-cli &> /dev/null; then
10 echo "[*] 安装 speedtest-cli..."
11 sudo apt install -y speedtest-cli
12fi
13
14# 获取最佳 MTU
15read -p "[?] 输入你测试的最佳 MTU (默认 1500): " MTU
16MTU=${MTU:-1500}
17
18# 测试带宽
19echo "[*] 正在测试带宽 (可能需要 30 秒)..."
20BANDWIDTH_MBPS=$(speedtest-cli --simple | awk '/Download/{print $2}')
21if [ -z "$BANDWIDTH_MBPS" ]; then
22 echo "[!] 带宽测试失败! 手动输入值:"
23 read -p "[?] 输入你的带宽 (Mbps): " BANDWIDTH_MBPS
24else
25 echo "[+] 测得带宽: ${BANDWIDTH_MBPS} Mbps"
26fi
27
28# 选择扫描类型
29echo "[?] 选择扫描类型:"
30echo " 1) SYN 扫描 (小包, 74 字节)"
31echo " 2) UDP 扫描 (大包, MTU 大小)"
32read -p "选项 (1/2): " SCAN_TYPE
33
34case $SCAN_TYPE in
35 1)
36 PACKET_SIZE=74
37 echo "[+] 使用 SYN 扫描 (包大小: 74 字节)"
38 ;;
39 2)
40 PACKET_SIZE=$((MTU + 18))
41 echo "[+] 使用 UDP 扫描 (包大小: ${PACKET_SIZE} 字节)"
42 ;;
43 *)
44 echo "[!] 无效选项! 使用默认 SYN 扫描"
45 PACKET_SIZE=74
46 ;;
47esac
48
49# 计算理论最大 pps (带宽 Mbps * 1e6 / (包大小 * 8))
50THEORETICAL_PPS=$(echo "scale=2; $BANDWIDTH_MBPS * 1000000 / ($PACKET_SIZE * 8)" | bc)
51
52# 计算安全值 (理论值的 50%)
53SAFE_PPS=$(echo "scale=0; $THEORETICAL_PPS * 0.5 / 1" | bc)
54
55# 计算首次扫描建议值 (理论值的 70%)
56INITIAL_PPS=$(echo "scale=0; $THEORETICAL_PPS * 0.7 / 1" | bc)
57
58# 输出结果
59echo -e "\n[+] 计算结果:"
60echo "--------------------------------"
61echo "带宽: $BANDWIDTH_MBPS Mbps"
62echo "MTU: $MTU 字节"
63echo "扫描包大小: $PACKET_SIZE 字节"
64echo "理论最大速率: $THEORETICAL_PPS pps"
65echo "--------------------------------"
66echo -e "\n[★] 建议 Nmap 参数:"
67echo "安全扫描: nmap --min-rate $SAFE_PPS ..."
68echo "快速扫描: nmap --min-rate $INITIAL_PPS ..."
69echo -e "\n[!] 提示:"
70echo "- 首次扫描建议使用快速扫描值"
71echo "- 若遇丢包,降低至安全扫描值"
72echo "- 在敏感网络环境中,建议从更低的速率开始"
保存后,赋予执行权限即可。
1chmod +x nmap-optimizer.sh
2# 配合mtu测试脚本使用
3./mtu-test.sh -t 192.168.140.72 -f
4./nmap-optimizer.sh

此方法给出的参数值比较保守,适合在普通公网环境探测时使用,打靶机Nmap扫描时建议将此参数略高6-8倍。
🔔 想要获取更多网络安全与编程技术干货?
关注 泷羽Sec-静安 公众号,与你一起探索前沿技术,分享实用的学习资源与工具。我们专注于深入分析,拒绝浮躁,只做最实用的技术分享!💻
扫描下方二维码,马上加入我们,共同成长!🌟
👉 长按或扫描二维码关注公众号
或者直接回复文章中的关键词,获取更多技术资料与书单推荐!📚


