From 5830e6bfb82ad58cc2af541bd34de34e6a6cfc85 Mon Sep 17 00:00:00 2001 From: mack-a <57424792+mack-a@users.noreply.github.com> Date: Mon, 8 Apr 2024 17:23:05 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E8=84=9A=E6=9C=AC):=20=E5=A2=9E=E5=8A=A0h?= =?UTF-8?q?ysteria2=E7=AB=AF=E5=8F=A3=E8=B7=B3=E8=B7=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- install.sh | 70 ++++++++++++++++++++++++++++++++---------------------- 1 file changed, 42 insertions(+), 28 deletions(-) diff --git a/install.sh b/install.sh index df0dd4f..49d27bf 100644 --- a/install.sh +++ b/install.sh @@ -2869,10 +2869,10 @@ hysteriaPortHopping() { echoContent skyBlue "\n进度 1/1 : 端口跳跃" echoContent red "\n==============================================================" echoContent yellow "# 注意事项\n" - echoContent yellow "仅支持UDP" + echoContent yellow "仅支持Hysteria2" echoContent yellow "端口跳跃的起始位置为30000" - echoContent yellow "端口跳跃的结束位置为60000" - echoContent yellow "可以在30000-60000范围中选一段" + echoContent yellow "端口跳跃的结束位置为40000" + echoContent yellow "可以在30000-40000范围中选一段" echoContent yellow "建议1000个左右" echoContent yellow "请输入端口跳跃的范围,例如[30000-31000]" @@ -2891,58 +2891,49 @@ hysteriaPortHopping() { if [[ -z "${portStart}" || -z "${portEnd}" ]]; then echoContent red " ---> 范围不合法" hysteriaPortHopping - elif ((portStart < 30000 || portStart > 60000 || portEnd < 30000 || portEnd > 60000 || portEnd < portStart)); then + elif ((portStart < 30000 || portStart > 40000 || portEnd < 30000 || portEnd > 40000 || portEnd < portStart)); then echoContent red " ---> 范围不合法" hysteriaPortHopping else echoContent green "\n端口范围: ${hysteriaPortHoppingRange}\n" - # ip -4 addr show | awk '/inet /{print $NF ":" $2}' | awk '{print ""NR""":"$0}' - # read -r -p "请选择对应网卡:" selectInterface - # if ! ip -4 addr show | awk '/inet /{print $NF ":" $2}' | awk '{print ""NR""":"$0}' | grep -q "${selectInterface}:"; then - # echoContent red " ---> 选择错误" - # hysteriaPortHopping - # else - iptables -t nat -A PREROUTING -p udp --dport "${portStart}:${portEnd}" -m comment --comment "mack-a_portHopping" -j DNAT --to-destination :${hysteriaPort} + iptables -t nat -A PREROUTING -p udp --dport "${portStart}:${portEnd}" -m comment --comment "mack-a_hysteria2_portHopping" -j DNAT --to-destination :${hysteriaPort} - if iptables-save | grep -q "mack-a_portHopping"; then + if iptables-save | grep -q "mack-a_hysteria2_portHopping"; then allowPort "${portStart}:${portEnd}" udp echoContent green " ---> 端口跳跃添加成功" else echoContent red " ---> 端口跳跃添加失败" fi - # fi fi - fi } # 读取端口跳跃的配置 readHysteriaPortHopping() { if [[ -n "${hysteriaPort}" ]]; then - # interfaceName=$(ip -4 addr show | awk '/inet /{print $NF ":" $2}' | awk '{print ""NR""":"$0}' | grep "${selectInterface}:" | awk -F "[:]" '{print $2}') - if iptables-save | grep -q "mack-a_portHopping"; then + if iptables-save | grep -q "mack-a_hysteria2_portHopping"; then portHopping= - portHopping=$(iptables-save | grep "mack-a_portHopping" | cut -d " " -f 8) + portHopping=$(iptables-save | grep "mack-a_hysteria2_portHopping" | cut -d " " -f 8) portHoppingStart=$(echo "${portHopping}" | cut -d ":" -f 1) portHoppingEnd=$(echo "${portHopping}" | cut -d ":" -f 2) fi fi } -# 删除hysteria 端口条约iptables规则 +# 删除hysteria2 端口跳跃iptables规则 deleteHysteriaPortHoppingRules() { - iptables -t nat -L PREROUTING --line-numbers | grep "mack-a_portHopping" | awk '{print $1}' | while read -r line; do + iptables -t nat -L PREROUTING --line-numbers | grep "mack-a_hysteria2_portHopping" | awk '{print $1}' | while read -r line; do iptables -t nat -D PREROUTING 1 done } +# hysteria2端口跳跃菜单 hysteriaPortHoppingMenu() { # 判断iptables是否存在 if ! find /usr/bin /usr/sbin | grep -q -w iptables; then echoContent red " ---> 无法识别iptables工具,无法使用端口跳跃,退出安装" exit 0 fi - readHysteriaConfig readHysteriaPortHopping echoContent skyBlue "\n进度 1/1 : 端口跳跃" echoContent red "\n==============================================================" @@ -2958,7 +2949,11 @@ hysteriaPortHoppingMenu() { echoContent green " ---> 删除成功" fi elif [[ "${selectPortHoppingStatus}" == "3" ]]; then - echoContent green " ---> 当前端口跳跃范围为: ${portHoppingStart}-${portHoppingEnd}" + if [[ -n "${portHoppingStart}" && -n "${portHoppingEnd}" ]]; then + echoContent green " ---> 当前端口跳跃范围为: ${portHoppingStart}-${portHoppingEnd}" + else + echoContent yellow " ---> 未设置端口跳跃" + fi else hysteriaPortHoppingMenu fi @@ -4633,10 +4628,18 @@ EOF elif [[ "${type}" == "hysteria" ]]; then echoContent yellow " ---> Hysteria(TLS)" + local clashMetaPortContent="port: ${port}" + local multiPort= + local multiPortEncode + if echo "${port}" | grep -q "-"; then + clashMetaPortContent="ports: ${port}" + multiPort="mport=${port}&" + multiPortEncode="mport%3D${port}%26" + fi - echoContent green " hysteria2://${id}@${currentHost}:${port}?peer=${currentHost}&insecure=0&sni=${currentHost}&alpn=h3#${email}\n" + echoContent green " hysteria2://${id}@${currentHost}:${singBoxHysteria2Port}?${multiPort}peer=${currentHost}&insecure=0&sni=${currentHost}&alpn=h3#${email}\n" cat <>"/etc/v2ray-agent/subscribe_local/default/${user}" -hysteria2://${id}@${currentHost}:${port}?peer=${currentHost}&insecure=0&sni=${currentHost}&alpn=h3#${email} +hysteria2://${id}@${currentHost}:${singBoxHysteria2Port}?${multiPort}peer=${currentHost}&insecure=0&sni=${currentHost}&alpn=h3#${email} EOF echoContent yellow " ---> v2rayN(hysteria+TLS)" echo "{\"server\": \"${currentHost}:${port}\",\"socks5\": { \"listen\": \"127.0.0.1:7798\", \"timeout\": 300},\"auth\":\"${id}\",\"tls\":{\"sni\":\"${currentHost}\"}}" | jq @@ -4645,7 +4648,7 @@ EOF - name: "${email}" type: hysteria2 server: ${currentHost} - port: ${port} + ${clashMetaPortContent} password: ${id} alpn: - h3 @@ -4654,11 +4657,11 @@ EOF down: "${hysteria2ClientDownloadSpeed} Mbps" EOF - singBoxSubscribeLocalConfig=$(jq -r ". += [{\"tag\":\"${email}\",\"type\":\"hysteria2\",\"server\":\"${currentHost}\",\"server_port\":${port},\"up_mbps\":${hysteria2ClientUploadSpeed},\"down_mbps\":${hysteria2ClientDownloadSpeed},\"password\":\"${id}\",\"tls\":{\"enabled\":true,\"server_name\":\"${currentHost}\",\"alpn\":[\"h3\"]}}]" "/etc/v2ray-agent/subscribe_local/sing-box/${user}") + singBoxSubscribeLocalConfig=$(jq -r ". += [{\"tag\":\"${email}\",\"type\":\"hysteria2\",\"server\":\"${currentHost}\",\"server_port\":${singBoxHysteria2Port},\"up_mbps\":${hysteria2ClientUploadSpeed},\"down_mbps\":${hysteria2ClientDownloadSpeed},\"password\":\"${id}\",\"tls\":{\"enabled\":true,\"server_name\":\"${currentHost}\",\"alpn\":[\"h3\"]}}]" "/etc/v2ray-agent/subscribe_local/sing-box/${user}") echo "${singBoxSubscribeLocalConfig}" | jq . >"/etc/v2ray-agent/subscribe_local/sing-box/${user}" echoContent yellow " ---> 二维码 Hysteria2(TLS)" - echoContent green " https://api.qrserver.com/v1/create-qr-code/?size=400x400&data=hysteria2%3A%2F%2F${id}%40${currentHost}%3A${port}%3Fpeer%3D${currentHost}%26insecure%3D0%26sni%3D${currentHost}%26alpn%3Dh3%23${email}\n" + echoContent green " https://api.qrserver.com/v1/create-qr-code/?size=400x400&data=hysteria2%3A%2F%2F${id}%40${currentHost}%3A${singBoxHysteria2Port}%3F${multiPortEncode}peer%3D${currentHost}%26insecure%3D0%26sni%3D${currentHost}%26alpn%3Dh3%23${email}\n" elif [[ "${type}" == "vlessReality" ]]; then local realityServerName=${xrayVLESSRealityServerName} @@ -4797,6 +4800,7 @@ showAccounts() { readInstallProtocolType readConfigHostPathUUID readSingBoxConfig + readHysteriaPortHopping echo echoContent skyBlue "\n进度 $1/${totalProgress} : 账号" @@ -4926,10 +4930,17 @@ showAccounts() { if [[ "${coreInstallType}" == "1" ]]; then path="${singBoxConfigPath}" fi + local hysteria2DefaultPort= + if [[ -n "${portHoppingStart}" && -n "${portHoppingEnd}" ]]; then + hysteria2DefaultPort="${portHoppingStart}-${portHoppingEnd}" + else + hysteria2DefaultPort=${singBoxHysteria2Port} + fi + jq -r -c '.inbounds[]|.users[]' "${path}06_hysteria2_inbounds.json" | while read -r user; do echoContent skyBlue "\n ---> 账号:$(echo "${user}" | jq -r .name)" echo - defaultBase64Code hysteria "${singBoxHysteria2Port}" "$(echo "${user}" | jq -r .name)" "$(echo "${user}" | jq -r .password)" + defaultBase64Code hysteria "${hysteria2DefaultPort}" "$(echo "${user}" | jq -r .name)" "$(echo "${user}" | jq -r .password)" done fi @@ -8648,6 +8659,7 @@ manageHysteria() { echoContent yellow "依赖第三方sing-box\n" echoContent yellow "1.重新安装" echoContent yellow "2.卸载" + echoContent yellow "3.端口跳跃管理" hysteria2Status=true else echoContent yellow "依赖sing-box内核\n" @@ -8660,6 +8672,8 @@ manageHysteria() { singBoxHysteria2Install elif [[ "${installHysteria2Status}" == "2" && "${hysteria2Status}" == "true" ]]; then unInstallSingBox hysteria2 + elif [[ "${installHysteria2Status}" == "3" && "${hysteria2Status}" == "true" ]]; then + hysteriaPortHoppingMenu fi } @@ -8787,7 +8801,7 @@ menu() { cd "$HOME" || exit echoContent red "\n==============================================================" echoContent green "作者:mack-a" - echoContent green "当前版本:v3.2.36" + echoContent green "当前版本:v3.2.37" echoContent green "Github:https://github.com/mack-a/v2ray-agent" echoContent green "描述:八合一共存脚本\c" showInstallStatus