UNRAID代理OutgoingProxy检测异常

前言

Unraid从 7.0.0 版本开始自带 Outgoing Proxy Manager,记得某个版本后具有“检测”功能,先会检测代理可用才能选择
近期使用了openwrt新固件,发现代理处于offline状态,在代理端一番排查后没能解决问题,之后发现可能由于❓问题会令该代理检查的链接指向回环地址,变得“不可达”,实际上代理是可用的。
本文是提供多一个选择,可以解决unraid的代理online检测,也可以自行另外选择彻底找到并解决代理端的问题。

测试环境

  • Linux 6.12.24-Unraid 7.1.4

问题导致

代理选择

状态显示Not AvailableOffline

在选择代理中disabled,不可选

插件更新

插件检查更新前

unraid插件检查更新前状态

状态显示不可达

unraid插件检测更新

点击插件-检查更新,直接返回没有响应
点击完成,重新加载后

unraid插件正常检查更新

正常检查到插件更新状态,并且更新插件也是可以正常更新,即代理实际是可用


尝试

在OutgoingProxy页面刷新时可以在代理端的logs有一个新增请求

25-09-02 15:56:57[ warn ][TCP] dial 🎯 全球直连 (match DomainSuffix/msftncsi.com) 192.168.100.11:42304(clash_meta) --> www.msftncsi.com:80 error: reject loopback connection to: www.msftncsi.com:80

目标被解析为回环地址(loopback),但明明走的应该是直连

于是在代理端一番排查,最后依然如此


unraid端解决方法

修改相关文件,令其使用别的网络连接检测链接,例如

# apple
http://captive.apple.com
# cloudflare
http://1.1.1.1/cdn-cgi/trace
# firefox
https://detectportal.firefox.com/success.txt
# 甚至ytb

涉及的两个文件

# outgoingproxy
-rw-r--r-- 1 root root 5856 Sep  2 15:03 /usr/local/emhttp/plugins/dynamix/include/OutgoingProxyLib.php
# 插件更新查询
-rw-r--r-- 1 root root 10377 Sep  2 06:34 /usr/local/emhttp/plugins/dynamix/include/Wrappers.php

修改

修改前备份


cp -a /usr/local/emhttp/plugins/dynamix/include/OutgoingProxyLib.php /usr/local/emhttp/plugins/dynamix/include/OutgoingProxyLib.php.bak
cp -a /usr/local/emhttp/plugins/dynamix/include/Wrappers.php /usr/local/emhttp/plugins/dynamix/include/Wrappers.php.bak

修改OutgoingProxyLib.php

nano /usr/local/emhttp/plugins/dynamix/include/OutgoingProxyLib.php

源代码62行左右

/* Check to see if the proxy is online and available. */
function proxy_online($proxyUrl) {

        $rc     = true;

        if ($proxyUrl) {
                /* Initialize cURL session. */
                $ch = curl_init("http://www.msftncsi.com/ncsi.txt");

                /* Set cURL options. */
......

此函数判断online的方式为:

  • 能否通过该代理成功访问 http://www.msftncsi.com/ncsi.txt 并获得响应(无论内容是什么)
    不验证内容或状态码,所以可以直接换成其它链接
/* Check to see if the proxy is online and available. */
function proxy_online($proxyUrl) {

        $rc     = true;

        if ($proxyUrl) {
                /* Initialize cURL session. */
                // $ch = curl_init("http://www.msftncsi.com/ncsi.txt");
                $ch = curl_init("http://captive.apple.com");

                /* Set cURL options. */
                curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 3);    /* Timeout in seconds. */
                curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, true);
                curl_setopt($ch, CURLOPT_PROXY, $proxyUrl);             /* Url is a proxy. */
                curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); /* Return transfer as a string. */

                /* Execute cURL request. */
                $response = curl_exec($ch);

                if ($response === false) {
                        /* Proxy is not available. */
                        $rc     = false;
                }

                /* Close cURL session. */
                curl_close($ch);
        }

        return ($rc);
}

注释原来的并加上新的代码
保存,退出

unraid OutgoingProxy页面刷新

没有不可用的提示

没有不可用的提示了

修改Wrappers.php

nano /usr/local/emhttp/plugins/dynamix/include/Wrappers.php

源代码262行左右,可以直接拉到底

/**
 * Detect network connectivity via Network Connectivity Status Indicator
 * @return bool
 */
function check_network_connectivity(): bool {
  $url = 'http://www.msftncsi.com/ncsi.txt';
  $out = http_get_contents($url);
  return ($out=="Microsoft NCSI");
}

此函数有对请求结果内容进行判断,微软的NCSI服务返回的是txt,内容纯为Microsoft NCSI
以http://captive.apple.com举例,返回的是html

<HTML><HEAD><TITLE>Success</TITLE></HEAD><BODY>Success</BODY></HTML>

所以需要一些修改

/**
 * Detect network connectivity via Network Connectivity Status Indicator
 * @return bool
 */
function check_network_connectivity_bak(): bool {
  $url = 'http://www.msftncsi.com/ncsi.txt';
  $out = http_get_contents($url);
  return ($out=="Microsoft NCSI");
}

function check_network_connectivity(): bool {
  $url = 'http://captive.apple.com';
  $out = http_get_contents($url);
  return str_contains($out, "Success");
}

根据内容是否含有Success判断,将原来的函数改其它名备份,新增函数使用原来的函数名

保存,退出

unraid 插件页面点击检查更新,可以正常检查状态

结束

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇