本文介绍了在Linux服务器环境下获取客户端真实IP的操作方法。

集成应用层Hook-TOA模块

  1. 执行install.sh,安装toa_server相关服务。
  2. 携带preload.so启动服务器。假设服务器名为nginx ,则启动命令如下。
    LD_PRELOAD=./preload.so ./nginx
    说明 您需要根据实际情况找到您程序的启动地方,增加如上命令参数进行服务的启动。
    nginx service接入流程
    1. 运行install.sh
    2. 确认 /usr/lib/systemd/system/nginx.service文件是否存在。
    3. 更新mynginx.sh
      cat > /root/mynginx.sh
    4. 将以下内容保存到mynginx.sh文件中,其中path-to-preload.so替换成preload.so的全路径。
      #!/bin/bash
      LD_PRELOAD=path-to-preload.so /usr/sbin/nginx
    5. 更新权限。
      chmod +x /root/mynginx.sh
    6. 编辑nginx.service
      vi /usr/lib/systemd/system/nginx.service
    7. 将其中的ExecStart=/usr/sbin/nginx行替换为ExecStart=/root/mynginx.sh
    8. 重启服务。
      service nginx restart
    9. 设置开机自动启动。
      systemctl enable nginx.service
      说明 也可以使用脚本启动nginx_reload.sh,命令如下。
      killall nginx
      LD_PRELOAD=path-to-preload.so /usr/local/nginx/sbin/nginx

      然后把nginx_reload.sh路径加到rc.local开机启动配置文件中。

  3. 配置toa服务开机自动启动。
    chmod +x /etc/rc.d/rc.local
  4. 确定服务是否成功加载preload.so
    示例命令如下。
    • 查端口是否开启:netstat -ntulp |grep 48888
    • nginx是否正确运行,查PID:ps -ef | grep nginx
    • 查是否加载preload:cat /proc/PID/maps | grep preload.so

集成代码层TOA

游戏盾TOA模块在本机安装一个进程,监听UDP:48888端口,业务进程将获取到的非真实IP和Port按照固定格式传入此端口进行查询,查询后会返回客户的真实IP和端口。

注意事项
  • 确保本机防火墙没有禁用UDP协议上的127.0.0.1:48888端口。
  • 使用接入方法(使用UDP协议,127.0.0.1:48888端口访问API服务)时,需要设置超时时间,以免未知问题造成的服务block。
  • 由于是旁路获取,所以理论上有极小概率获取失败,主服务本身需要考虑获取失败时的对应方案。
  • Server/Client任何一端主动close socket时都会删除源IP/Port数据,请重新连接建立数据。

具体请参见TOA压缩包内的指导文档进行操作。详细情况可以咨询游戏盾服务团队。