Home
avatar

静静

【踩坑总结】丝滑连接OffSec官方VPN的方法

关注泷羽Sec泷羽Sec-静安公众号,这里会定期更新与 OSCP、渗透测试等相关的最新文章,帮助你理解网络安全领域的最新动态。后台回复“OSCP配套工具”获取本文的工具。

方法对比难度流畅度靶机VPN是否双端流量消耗稳定性
方法一:Tun模式⭐⭐340ms仅Kali
方法二:允许局域网⭐⭐⭐190msWin、Kali双端
方法三:Kali中单独登机⭐⭐⭐200ms仅Kali

流畅度测试命令 ping IP -c 10 |grep rtt

方法一:物理机登机场开Tun模式,Kali虚拟机连接靶机VPN

找个机场订阅,需要登机方式的可以后台私信我。

image-20250714100539961

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

image-20250714100703533

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

image-20250714101015098

image-20250714101324318

除了Clash小猫咪软件,也可以使用V2rayN软件特定版本的tun模式,不要使用新版,新版的tun不稳定。

此时进入Kali虚拟机,查询一下自己的出口节点,确实是机场的节点了,而且ping谷歌的速度也比较快,就说明翻过去了。

image-20250714130005840

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

image-20250714101517858

然后在Kali中使用以下命令连接Kali靶机的VPN。

sudo openvpn universal.ovpn

image-20250714103115235

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

image-20250714114334045

使用如下命令设置以下速率,来保证VPN的传输稳定,如果你的机场够快,下面的命令也可以不设,默认的1500速度也一样的。

sudo ip link set dev tun0 mtu 1250
ip link show tun0

image-20250714130244569

靶场漏端口的情况和机场连接的速度有关,测试下来的经验:

  • 极速机场:便宜,拖Docker镜像确实极速,但是干别的不行,Kali的VPN都连不上。

  • 龙猫机场:价格中等,拖Docker镜像有点慢,综合来说干什么都可以,就是都有点慢,能连Kali的VPN,但是扫端口略慢。

  • Flower机场:价格是龙猫的两倍,速度很快,连Kali的VPN很丝滑,推荐考试使用。

  • 一元机场:白菜价,巨慢,疑似跑路了,节点没几个活的了。

  • 自建专线机场:包机,很快,但是也贵,速度看机场在哪里,建议买香港节点,连Kali的VPN很丝滑,推荐考试使用。

总结:这个方法最简单也最直接,但是tun+全局模式会让所有流量都走的机场代理,对于机场流量消耗巨大。还有就是某些国内网站从国外地址翻进来访问也是很慢很慢。

方法二:物理机登机场允许局域网连接,修改universal.ovpn开头

代理规则组依旧是选择全局代理。

image-20250714150313710

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

image-20250714150217008

注意看端口用的时哪一个,这里用的时7897。修改官网下载的VPN文件,在首行加入代理地址

socks-proxy 127.0.0.1 7897

image-20250714154041525

然后再物理机Windows中直接导入OpenVPN GUI软件中,再Windows上连接VPN。

image-20250714151004069

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

image-20250714151309853

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

image-20250714151157315

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

image-20250714152056842

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

image-20250714152428369

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

image-20250714153438608

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

image-20250714153727717

方法三:Kali中用V2rayN命令行连接,Kali直连Vpn

安装V2rayN的Linux版本,复制机场信息到Kali中,在Kali中登录VPN。

image-20250714173555122

image-20250714173907199

扫描端口也不掉包的。

image-20250714174349207

命令参数之间的配合

如果mtu速度、机场速度和Nmap等命令参数配合的不对,可能出现以下情况

  1. 一扫就是一堆

image-20250714120210543

  1. 端口漏扫

image-20250714120254314

  1. 扫的很慢,半天没有反应。

每个人的网络环境不一样,带宽和速度不一样,使用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协议推荐开销值包含内容
WireGuard40-60基本头+加密信息
OpenVPN60-100IP头+UDP头+OpenVPN封装头
IPsec50-80ESP头+认证数据+填充
L2TP80-120IP头+UDP头+L2TP头+PPP头

动态计算原理

最终MTU = 最大无分片包大小(ICMP数据+28字节) + 隧道包头开销

image-20250714130137559

Flower机场测试

image-20250714125153653

龙猫机场测试

image-20250714125614521

自建专线测试

image-20250714130040762

可以看到,不同机场能承载的MTU是有差距的,机场之间不同节点也是有差距的。

Nmap 最佳参数确定

理解 MTU、带宽和 Nmap 的 --min-rate 参数之间的关系,关键在于它们如何共同影响网络数据包传输的速率和效率,尤其是在进行网络扫描时。它们之间没有直接的数学公式,但相互影响显著:

  1. MTU (Maximum Transmission Unit - 最大传输单元):

    • 定义: 指网络链路层能够传输的最大数据帧(或数据包)的大小(以字节为单位)。常见值如以太网的 1500 字节(不含帧头)。
    • 作用: 决定了单个数据包能承载的最大有效载荷(Payload)。如果应用层数据超过 MTU,它会被分片(Fragmentation)成多个数据包传输。
    • 与扫描的关系: Nmap 发送的探测包大小取决于扫描类型(如 SYN 扫描包很小,UDP 扫描包可能接近 MTU)和选项(如 --data-length)。包的大小直接影响每个包在网络中传输所需的时间和资源。
  2. 带宽 (Bandwidth):

    • 定义: 指网络链路在单位时间内能够传输的最大数据量(以比特/秒为单位,如 Mbps, Gbps)。
    • 作用: 这是网络的物理容量限制。它设定了数据流经特定路径的最大速率上限
    • 与扫描的关系: Nmap 扫描产生的总数据流量(所有发送和接收包的大小之和)除以扫描时间不能超过可用带宽(还需要考虑链路上的其他流量)。高带宽链路能承载更快的扫描速率。
  3. Nmap 的 --min-rate <packets per second> 参数:

    • 定义: 强制 Nmap 尝试以至少指定的速率(每秒发送的包数)发送探测包。
    • 作用: 主要用于加速扫描。它告诉 Nmap 不要低于这个发送速率,即使目标响应缓慢或丢包率高。它直接控制的是发包的速率(包/秒),而不是数据速率(比特/秒)。
    • 与扫描的关系: 这是用户主动设置的一个目标速率下限,用于追求速度。但它受到 MTU 和带宽的物理限制。

三者如何相互作用:

  1. 带宽是总容量的天花板:

    • 无论 --min-rate 设置得多高,Nmap 实际能达到的数据速率(比特/秒) 绝对不可能超过链路的可用带宽。
    • 公式表示: (平均包大小 in bits) * (实际发包速率 in pps) <= 可用带宽 (in bps)
    • 关键点: --min-rate 控制的是包/秒 (pps),但带宽限制的是比特/秒 (bps)。包的大小(受 MTU 影响)是连接两者的桥梁。
  2. MTU 影响包大小,进而影响数据速率:

    • 如果 Nmap 发送的探测包很大(接近 MTU),那么即使以中等--min-rate (pps) 发送,产生的数据速率 (bps) 也会很高,更容易接近或达到带宽上限。
    • 如果 Nmap 发送的探测包很小(如 SYN 扫描包只有 60-70 字节),那么即使设置非常高的 --min-rate (pps),产生的数据速率 (bps) 也可能远低于带宽上限。在这种情况下,瓶颈往往不在带宽,而在操作系统、网卡处理能力或目标响应能力上。
  3. --min-rate 的追求与物理限制的冲突:

    • 追求高 pps: 用户设置高 --min-rate 是为了快速完成扫描(发送更多包/秒)。
    • 带宽限制: 如果包足够大,高 pps 会迅速消耗带宽。一旦达到带宽上限,Nmap 就无法再提高 pps(除非包变小,但包大小通常由扫描类型决定)。
    • MTU 的间接影响: 大包(接近 MTU)使得在较低 pps 下就达到带宽上限的可能性更高,限制了 --min-rate 进一步提升 pps 的空间。小包则允许更高的 pps 而不触及带宽上限。
    • 其他限制: 即使带宽允许,过高的 --min-rate 还可能超过操作系统或网卡的发送能力上限(PPS 上限),或者被网络设备(防火墙、路由器)的速率限制策略拦截,或者压垮目标主机导致其无法响应或产生大量丢包。

总结关系:

  • 带宽是绝对上限: 它限制了所有流量(包括扫描流量)的最大数据速率 (bps)。
  • MTU 影响效率: 它决定了单个包的最大尺寸。包的大小(由扫描类型和 MTU 共同决定)是连接发包速率 (pps - 由 --min-rate 控制) 和数据速率 (bps - 受带宽限制) 的关键因子。大包更容易使扫描流量触及带宽上限。
  • --min-rate 是用户目标: 它指定了 Nmap 尝试达到的最低发包速率 (pps)。它的实际效果受到带宽(通过包大小换算成数据速率)以及操作系统、网卡、网络设备能力、目标响应能力和延迟(RTT)的综合限制

实际应用中的考虑:

  1. 高速网络(高带宽): 在小包扫描(如 SYN 扫描)中,--min-rate 可以设置得很高(几千甚至几万 pps),因为小包的高 pps 消耗的实际带宽相对较小,瓶颈通常在端点处理能力或网络延迟(RTT)。对于大包扫描(如大负载 UDP 扫描),高 --min-rate 更容易达到带宽上限。
  2. 低速网络(低带宽): 即使是中等 --min-rate 或小包扫描,也容易达到带宽上限。设置过高的 --min-rate 不仅无效(实际速率上不去),还可能导致严重拥塞和丢包。
  3. 优化扫描: 理解网络带宽和典型 MTU 有助于合理设置 --min-rate。目标应该是找到在可用带宽和处理能力范围内尽可能快(高 pps)但不至于引起过度丢包或被防火墙封禁的速率。通常需要根据网络环境和扫描类型进行测试和调整。
  4. 避免拥塞: 在共享网络或生产环境中扫描时,过高的 --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

image-20250714144005183

此方法给出的参数值比较保守,适合在普通公网环境探测时使用,打靶机Nmap扫描时建议将此参数略高6-8倍。


🔔 想要获取更多网络安全与编程技术干货?

关注 泷羽Sec-静安 公众号,与你一起探索前沿技术,分享实用的学习资源与工具。我们专注于深入分析,拒绝浮躁,只做最实用的技术分享!💻

扫描下方二维码,马上加入我们,共同成长!🌟

👉 长按或扫描二维码关注公众号

或者直接回复文章中的关键词,获取更多技术资料与书单推荐!📚

Kali OSCP