详细解析-取消sspanel节点对接时的IP验证,webapi对接

前言

本文解决问题:sspanel原版在使用时,通过webapi对接节点会验证节点id、服务器IP、mukey等参数,来确保安全性。
但实际使用过程诸多不便,比如在使用中转节点、IPLC节点、使用隧道转发等情况下如果节点地址填写域名会出现节点离线
以上节点都有共同点,节点有入口IP和出口IP,也就是两个IP地址。现有解决方案是节点地址填入口IP,节点IP填出口。如果入口是动态IP就会导致频繁更新。
本文将介绍如何去掉/关闭节点的IP验证,如果您不清楚隧道和中转相关信息,我们提供部分资料供您查阅:

SSR国内中转至国外,使用Brook端口转发

可视化的转发面板-iptables详细教程

VNet-Tunnel隧道传输SSR流量安装教程

正文

首先我们找到复杂节点对接的文件:Mod_Mu.php
网站根目录/app/Middleware
我们打开文件找到下述代码

微信截图_20200226193639.png

注意,因为使用版本不一样,内容可能不完全相同,我们删除这个代码即可。操作之前请备份文件。

删除代码后节点对接时不再验证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添加定义使调用生效,本人测试时未添加也生效了,但为了避免误导,此处还是贴出来。

搜索appName在下面添加一行代码

'checkNodeIp' => self::get('checkNodeIp'),
已有 8 条评论
  1. hikelin

    app/Services/Config.php 如何添加??

    hikelin 2020年4月20日, 0:16回复
    1. 小忆

      已更新文章

      小忆 2020年7月4日, 12:48回复
  2. xiaobai

    请问这样设置后是不是可以一个面板节点可以对接多个后端。。随时改IP即可切换。。会不会对面板有什么影响?

    xiaobai 2020年3月10日, 21:52回复
    1. 小忆

      会对人数统计有影响,因为面板只统计一个节点反馈的信息。具体没有测试过

      小忆 2020年5月7日, 21:52回复
  3. 小白

    我把那段代码删除了 还是自动获取呢 ...

    小白 2020年3月6日, 11:01回复
    1. 小忆

      正文是删除,补充是自定义。两种选择一个即可。
      并不是不获取IP,是不验证IP

      小忆 2020年3月7日, 21:33回复
      1. 小白

        十分感谢!

        小白 2020年3月11日, 7:37回复
  4. 小白

    添加自定义需要加什么?谢谢

    小白 2020年3月6日, 10:44回复
发表新评论