分类 服务器 下的文章

在项目实施过程中,经常会遇到服务器没有外网,需要经由跳板机作为中转使用的情况,因此有个代理服务器就很有必要了。
Xray 更新比较快,配置时不时可能就要对应更新,因此还是记录一下,方便部署时之间使用,有变动时也同步进行更新。

零、架构

Client
      │
 VLESS + XHTTP(stream-up)
 TLS(h2)
      │
      ▼
OpenResty :443
 TLS terminate
 grpc_pass
      │
      ▼
127.0.0.1:10000
Xray
VLESS + XHTTP
security:none

Xray版本: ghcr.io/xtls/xray-core:26.6.27

一、Nginx 配置

location /sgip {
    grpc_set_header Host $host;
    grpc_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    grpc_set_header X-Real-IP $remote_addr;

    grpc_read_timeout 600s;
    grpc_send_timeout 600s;

    # 替换为实际的IP和端口
    grpc_pass grpc://172.17.0.2:1090;
}

二、服务端

05_inbounds.json

uuid 可以使用 xray uuid 命令来进行生成
{
  "inbounds": [
    {
      "listen": "0.0.0.0",
      "port": 1090,
      "protocol": "vless",
      "settings": {
        "clients": [
          {
            "id": "bcd85299-ac78-48b8-ae2e-37f29ddbc588"
          }
        ],
        "decryption": "none"
      },
      "streamSettings": {
        "network": "xhttp",
        "security": "none",
        "xhttpSettings": {
          "path": "/xhttp",
          "mode": "stream-up"
        }
      }
    }
  ]
}

06_outbounds.json

{
  "outbounds": [
    {
        "protocol": "freedom",
        "tag": "direct"
    }
  ]
}

三、客户端

{
  "inbounds": [
    {
      "listen": "0.0.0.0",
      "port": 1080,
      "protocol": "http"
    }
  ],
  "outbounds": [
    {
      "protocol": "vless",
      "settings": {
        "vnext": [
          {
            "address": "example.com",
            "port": 443,
            "users": [
              {
                "id": "bcd85299-ac78-48b8-ae2e-37f29ddbc588",
                "encryption": "none"
              }
            ]
          }
        ]
      },
      "streamSettings": {
        "network": "xhttp",
        "security": "tls",
        "tlsSettings": {
          "serverName": "example.com",
          "alpn": [
            "h2"
          ]
        },
        "xhttpSettings": {
          "host": "example.com",
          "path": "/xhttp",
          "mode": "stream-up"
        }
      }
    }
  ]
}

最近阿里和腾讯都出了峰值 200 Mbps 的轻量应用服务器,这么大的带宽,很适合用来取代 CDN 降低成本。

对象存储权限设置

对于私有储存,可以设置授权策略,让轻量应用服务器无需鉴权即可访问对象存储。

界面:储存桶 -> 权限控制 -> Bucket 授权策略

  • 授权用户:所有账号
  • 授权操作:简单设置-只读
  • 条件:IP=轻量应用服务器内网 IP

Nginx 配置

location ^~ / {
    # 替换成自己的 Bucket 域名(内网)
    proxy_pass http://demo.oss-cn-shenzhen-internal.aliyuncs.com;
    # 替换成自己的 Bucket 域名(内网)
    proxy_set_header Host demo.oss-cn-shenzhen-internal.aliyuncs.com;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header REMOTE-HOST $remote_addr;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $http_connection;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_http_version 1.1;
}

腾讯云轻量云不支持 IPv6 ,一直跳票到现在也不支持,所以只能通过其它方式来添加 IPv6 支持了。这里我们使用HE(Hurricane Electric)提供的免费隧道来实现。

1.注册并登录HE
2.点击左侧的User Functions - Create Regular Tunnel
3.输入服务器的外围 IP 和隧道的地域,然后创建

2023-02-06T08:56:59.png

4.获取 netplan 配置

2023-02-06T09:07:02.png

5.获取服务器内网 IP

4.在服务器上创建 /etc/netplan/he.yaml 文件

network:
  version: 2
  tunnels:
    he-ipv6:
      mode: sit
      remote: 216.218.221.6
      local: 183.236.133.109
      addresses:
        - "2001:470:18:118::2/64"
      routes:
        - to: default
          via: "2001:470:18:118::1"