From 6614a7dcaff1f062ab1f5b0f9fc283e5ffa5c232 Mon Sep 17 00:00:00 2001 From: rpone Date: Thu, 6 Aug 2026 21:48:14 +0800 Subject: [PATCH] feat: add optional UDP buffer limit tuning --- scripts/lang/chs/2_settings.lang | 4 ++++ scripts/lang/en/2_settings.lang | 4 ++++ scripts/menus/2_settings.sh | 14 ++++++++++++++ scripts/starts/bfstart.sh | 18 ++++++++++++++++++ 4 files changed, 40 insertions(+) diff --git a/scripts/lang/chs/2_settings.lang b/scripts/lang/chs/2_settings.lang index 16de3adc1..5d96bd65e 100644 --- a/scripts/lang/chs/2_settings.lang +++ b/scripts/lang/chs/2_settings.lang @@ -10,6 +10,7 @@ SET_MENU_SKIP_CERT="跳过证书验证:" SET_MENU_SNIFFER="启用域名嗅探:" SET_MENU_ADV_PORT="自定义端口及密钥" SET_MENU_IPV6="IPv6设置: " +SET_MENU_UDP_BUFFER="提高UDP缓冲上限(16 MiB):" SET_MENU_RESET="重置/备份/还原脚本设置" SET_MENU_LANG="多语言切换" SET_MENU_UI="UI切换" @@ -26,6 +27,9 @@ SET_SNIFFER_LOCKED="当前内核与DNS模式组合下,域名嗅探无法关闭 SET_CORE_RUNNING="检测到服务正在运行,需要先停止服务!" SET_CORE_STOP_CONFIRM="是否确认停止服务?" +SET_UDP_BUFFER_ON="已启用UDP缓冲上限优化!" +SET_UDP_BUFFER_OFF="已禁用UDP缓冲上限优化,现有系统值不会被降低。" +SET_UDP_BUFFER_RESTART="重启服务后对新连接生效。" # ================================================= # Backup / Restore / Reset diff --git a/scripts/lang/en/2_settings.lang b/scripts/lang/en/2_settings.lang index 863809cc3..7e69ceddf 100644 --- a/scripts/lang/en/2_settings.lang +++ b/scripts/lang/en/2_settings.lang @@ -10,6 +10,7 @@ SET_MENU_SKIP_CERT="Skip Cert Verify:" SET_MENU_SNIFFER="Enable Sniff:" SET_MENU_ADV_PORT="Custom Ports and Secrets" SET_MENU_IPV6="IPv6 Settings:" +SET_MENU_UDP_BUFFER="Raise UDP Buffer Limit (16 MiB):" SET_MENU_RESET="Reset / Backup / Restore Script Settings" SET_MENU_LANG="Language" SET_MENU_UI="UI Switch" @@ -26,6 +27,9 @@ SET_SNIFFER_LOCKED="Domain sniffing cannot be disabled with the current core and SET_CORE_RUNNING="Service is currently running and must be stopped first!" SET_CORE_STOP_CONFIRM="Do you want to stop the service?" +SET_UDP_BUFFER_ON="UDP buffer limit optimization is now enabled!" +SET_UDP_BUFFER_OFF="UDP buffer limit optimization is now disabled. Existing system values will not be lowered." +SET_UDP_BUFFER_RESTART="Restart the service to apply it to new connections." # ================================================= # Backup / Restore / Reset diff --git a/scripts/menus/2_settings.sh b/scripts/menus/2_settings.sh index 05758c4d0..e73f45f0d 100644 --- a/scripts/menus/2_settings.sh +++ b/scripts/menus/2_settings.sh @@ -16,6 +16,7 @@ settings() { echo "$crashcore" | grep -q 'singbox' && sniffer=ON } [ -z "$dns_mod" ] && dns_mod='redir_host' + [ -z "$udp_buffer" ] && udp_buffer=OFF comp_box "\033[30;47m$SET_MENU_TITLE\033[0m" content_line "1) $SET_MENU_REDIR\t\033[36m$redir_mod$MENU_MOD\033[0m" @@ -27,6 +28,7 @@ settings() { content_line "6) $SET_MENU_ADV_PORT" } content_line "7) $SET_MENU_IPV6\t\033[36m$ipv6_redir\033[0m" + content_line "8) $SET_MENU_UDP_BUFFER\t\033[36m$udp_buffer\033[0m" btm_box "" \ "a) \033[31m$SET_MENU_RESET\033[0m" \ "b) \033[36m$SET_MENU_LANG\033[0m" \ @@ -143,6 +145,18 @@ settings() { 7) set_ipv6 ;; + 8) + if [ "$udp_buffer" = "ON" ]; then + udp_buffer=OFF + msg_alert "\033[33m$SET_UDP_BUFFER_OFF\033[0m" \ + "$SET_UDP_BUFFER_RESTART" + else + udp_buffer=ON + msg_alert "\033[32m$SET_UDP_BUFFER_ON\033[0m" \ + "$SET_UDP_BUFFER_RESTART" + fi + setconfig udp_buffer "$udp_buffer" + ;; a) BACK_TAR="$CRASHDIR/configs.tar.gz" comp_box "1) $SET_BACKUP" \ diff --git a/scripts/starts/bfstart.sh b/scripts/starts/bfstart.sh index ce8450f85..134f502d9 100644 --- a/scripts/starts/bfstart.sh +++ b/scripts/starts/bfstart.sh @@ -23,6 +23,22 @@ [ -z "$redir_mod" ] && firewall_area='4' routing_mark=$((fwmark + 2)) +set_udp_buffer_limit() { + [ "$udp_buffer" = "ON" ] || return 0 + + udp_buffer_limit=16777216 + for udp_buffer_file in /proc/sys/net/core/rmem_max /proc/sys/net/core/wmem_max; do + [ -w "$udp_buffer_file" ] || continue + udp_buffer_current=$(cat "$udp_buffer_file" 2>/dev/null) + case "$udp_buffer_current" in + '' | *[!0-9]*) continue ;; + esac + [ "$udp_buffer_current" -lt "$udp_buffer_limit" ] && + printf '%s\n' "$udp_buffer_limit" >"$udp_buffer_file" + done + unset udp_buffer_limit udp_buffer_file udp_buffer_current +} + makehtml() { #生成面板跳转文件 cat >"$BINDIR"/ui/index.html < @@ -78,6 +94,8 @@ EOF [ "$network_check" != "OFF" ] && [ ! -f "$TMPDIR"/crash_start_time ] && ckcmd ping && . "$CRASHDIR"/starts/check_network.sh && check_network [ ! -d "$BINDIR"/ui ] && mkdir -p "$BINDIR"/ui [ -z "$crashcore" ] && crashcore=meta +#按需提高UDP套接字缓冲上限,改善Hysteria2等QUIC协议的吞吐 +set_udp_buffer_limit #执行条件任务 [ -s "$TASKCFGDIR"/bfstart ] && . "$TASKCFGDIR"/bfstart #检查内核配置文件