前言

在以前的一篇文章双栈出击:本地服务器 IPv4/IPv6 公网访问指南 - 轻雅阁我分享过我的服务器的网络配置情况,那个教程我记录了我是如何将本地服务通过双栈部署到公网,但是在这以后我仍然不满意这样的配置,因为通过那篇教程配置服务之后很可能会出现重定向次数过多,无法获取访问者真实IP等问题,所以在经过不断地尝试和努力之后有了这篇文章。这篇文章将详细介绍如何在本地只有动态IPV6(ps.没有公网IPV6的同学也可以继续往下看,通过这篇文章你会知道如何使用樱花FRP穿透服务并在1panel中部署对于的服务和获取访问者真实IP)的情况下实现双栈访问,并且会解决以前那篇文章存在的所有问题,达到与纯公网IP部署的服务一样的体验。

配置樱花FRP

创建HTTPS隧道

  1. 进入用户信息 | SakuraFrp界面打开高级用户模式

  1. 搜索樱花FRP或者直接点击该链接(隧道列表 | SakuraFrp)进入樱花FRP的隧道列表并创建隧道

  1. 在创建隧道界面选择可建站,并在普通节点选择一个内地的节点

  1. 设置隧道节点,并在隧道自定义设置中写入 proxy_protocol_version=v2

服务器安装樱花FRP并启动

完成上述步骤之后樱花FRP服务端的配置就全部完成了,接下来我们需要在自己的服务器上安装樱花FRP,这里我推荐以docker形式安装,这种形式安装起来会十分方便,具体的安装方法可见SakuraFrp 启动器安装 / 使用指南 | SakuraFrp 帮助文档或者直接使用来自官方的docker版本安装脚本

sudo bash -c ". <(curl -sSL https://doc.natfrp.com/launcher.sh)"

# 或者使用 wget
sudo bash -c ". <(wget -O- https://doc.natfrp.com/launcher.sh)"

使用root用户输入脚本后根据提示即可安装成功,如果不知道访问密室在何处的化可以访问用户信息 | SakuraFrp获取

启动节点隧道

配置1panel服务

  1. 打开1panel安装DDNS-GO和OPENRESTY,按照DDNS-GO的要求配置好DNS服务商并回到隧道列表 | SakuraFrp复制需要解析到域名的CNAME

  1. 打开DDNS-GO配置IPV4信息,获取IP的方式改为“通过命令获取” ping -c 1 +刚才复制的CNAME 如图所示

  1. 配置IPV6信息,获取方式改为“通过接口获取”

通过这样配置之后我们的服务器就通过我们绑定的域名暴露到公网了,接下来我们就要开始解决不能获取用户真实IP的问题了。

  1. 在1panel内创建网站,并配置启用HTTPS

  1. 点击配置文件,并在 listen 80; listen 443 ssl http2; 后面分别添加proxy_protocol ,最终变为 listen 80 proxy_protocol; listen 443 ssl http2 proxy_protocol; 在server{}内添加real_ip_header proxy_protocol;real_ip_recursive on;set_real_ip_from 127.0.0.1; 便可完成获取用户真实IP的操作。

配置文件实例:

server {
    listen 80 proxy_protocol;  #  proxy_protocol添加在listen之后
    listen 443 ssl http2 proxy_protocol; #  proxy_protocol添加在listen之后
    listen [::]:80  ; 
    listen [::]:443 ssl http2  ; 
    server_name xxx.xxxxx.com; 
    index index.php index.html index.htm default.php default.htm default.html; 
    proxy_set_header Host $host; 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    proxy_set_header X-Forwarded-Host $server_name; 
    proxy_set_header X-Real-IP $remote_addr; 

 #  添加下面这三行代码到这里
 #  real_ip_header proxy_protocol; #  启用 PROXY 协议支持
 #  real_ip_recursive on; #  递归处理 PROXY 协议中的 IP 地址
 #  set_real_ip_from 127.0.0.1; #  这里的127.0.0.1表示可信的代理服务器 IP 地址
 #  添加上面这三行代码到这里
    
    proxy_http_version 1.1; 
    proxy_set_header Upgrade $http_upgrade; 
    proxy_set_header Connection $http_connection; 
    access_log /xxx/sites/xxx.xxx.com/log/access.log main; 
    error_log /xxx/sites/xxx.xxx.com/log/error.log; 
    ......
}

通过上面的过程即可实现本地服务的双栈访问。例如本站就是通过这样的方式实现的,访问速度还是蛮快的吧。