前言
本文解决问题:sspanel原版在使用时,通过webapi对接节点会验证节点id、服务器IP、mukey等参数,来确保安全性。
但实际使用过程诸多不便,比如在使用中转节点、IPLC节点、使用隧道转发等情况下如果节点地址填写域名会出现节点离线
以上节点都有共同点,节点有入口IP和出口IP,也就是两个IP地址。现有解决方案是节点地址填入口IP,节点IP填出口。如果入口是动态IP就会导致频繁更新。
本文将介绍如何去掉/关闭节点的IP验证,如果您不清楚隧道和中转相关信息,我们提供部分资料供您查阅:
正文
首先我们找到复杂节点对接的文件:Mod_Mu.php
在网站根目录/app/Middleware
下
我们打开文件找到下述代码
注意,因为使用版本不一样,内容可能不完全相同,我们删除这个代码即可。操作之前请备份文件。
删除代码后节点对接时不再验证IP,目的达成!
补充
如果你像我一样,不愿意简单的删除,我们可以在代码上加入if。在config文件中选择是否打开验证。
我们在上述代码头加入
if (Config::get('checkNodeIp') == 'true') {
结尾加上括弧
}
效果如下(不建议直接复制,不同版本不同分支代码可能不同。本文是在master分支下演示)
if (Config::get('checkNodeIp') == 'true') {
$node = Node::where("node_ip", "LIKE", $_SERVER["REMOTE_ADDR"].'%')->first();
if ($node==null && $_SERVER["REMOTE_ADDR"] != '127.0.0.1') {
$res['ret'] = 0;
$res['data'] = "token or source is invalid, Your ip address is ". $_SERVER["REMOTE_ADDR"];
$response->getBody()->write(json_encode($res));
return $response;
}
}
然后打开.config.php
在任意位置添加一行
$System_Config['checkNodeIp'] = 'false'; //webapi是否验证IP,值true时验证
如果dev分支可能是
$_ENV['checkNodeIp'] = false; //是否webapi验证节点ip
至此,设置完毕,true是验证,否则不验证。不验证节点IP会降低安全性,请自行斟酌选择
小尾巴
经提醒需要在 app/Services/Config.php
添加定义使调用生效,本人测试时未添加也生效了,但为了避免误导,此处还是贴出来。