分享一个基于分流的安全访问方案

256 天前
 PXW139

相信这里的大部分人都有访问自己家里服务器的需求
但是部分地区家宽不给开 WEB 服务
类似 zerotier 这种虚拟组网方案需要时刻开启软件组网,且对移动端极不友好(影响翻墙)
Frp 呢也要两边设备同时安装才能有隐藏 WEB 服务的效果

我目前使用的是基于 Clash+*ray 的分流方案
Clash 可以替换成任意带分流的软件

优点:
访问服务器完全无感(直连,可以用 80/443)
安全性 Max(毕竟是翻墙用的)
速度也还不错(看协议)
全平台友好(全平台翻墙软件的 Power)
可以细化权限,针对不同用户给予不同访问权限

缺点:
刚需公网 IP(实在没有的话 NAT1 也凑合)
需要开代理(不会有人不是全天开代理吧)
TCP/UDP 流量需要 TUN 模式(其他方案也需要)
配置略复杂,新增服务可能比较麻烦
在家时访问速度会负优化(分流一个 DIRECT 可解)

基本思路

在 Clash 中把内网流量在规则中分流到自己的*Xray 服务器
在 Xray 服务器中进行二次分流
丢弃全部公网流量,丢弃重要发往重要设备的流量(安全考虑,虽然其实没啥意义)
下面是我的 Xray 配置文件,简单参考就行,路径我随便改的,记得删除注释
192.168.31.1 是我的路由器地址,192.168.31.11 是我的 Nginx 服务器地址

{
  "log": {
    "access": "/access.log",
    "error": "/error.log",
    "loglevel": "warning"
  },
  "dns": {
    "servers": ["localhost"],
    "hosts": {
      "domain:XXXXXXX.com": "192.168.31.11"//把这个域名的全部子域名解析到 Nginx 的服务器 IP
    }
  },
  "inbound": {
    "port": 65432,
    "protocol": "vmess",
    "settings": {
      "clients": [
        {
          "id": "UUID 在此",
          "level": 1,
          "alterId": 100
        }
      ]
    },
    "streamSettings": {
      "security": "tls",
      "tlsSettings": {
        "serverName": "XXXX.com",
        "certificates": [
{
            "certificateFile": "/fullchain.pem",
            "keyFile": "/privkey.pem"
          }
        ]
      }
    }
  },
  "outbounds": [
    {
      "tag": "blocked",//未匹配服务全部丢弃,默认未匹配的流量全部走第一个出口
      "protocol": "blackhole",
      "settings": {}
    },
    {
      "tag": "direct",
      "protocol": "freedom",
      "settings": {
      "domainStrategy": "UseIP"//必须开启此项才能使用 hosts 中的配置
      }
    }
  ],
  "inboundDetour": [],
  "outboundDetour": [],
  "routing": {
    "domainStrategy": "IPIfNonMatch",
    "settings": {
      "rules": [
        {
"type": "field",
          "ip": "192.168.31.1", //此处屏蔽访问路由器
          "outboundTag": "blocked"
        },
        {
          "type": "field",  
          "ip": ["192.168.31.1/24"],//允许访问路由器 IP 段其他设备
          "outboundTag": "direct"
        },
        {
          "type": "field",
          "domain": ["domain:XXXX.COM"],//允许访问指定域名(实际上用不到这玩意,删了也没啥影响)
          "outboundTag": "direct"
        },
        {
          "type": "field",
          "domain": ["domain:gstatic.com"],//允许访问测速服务器
          "outboundTag": "direct"
        },
        {
          "type": "field",//屏蔽访问其他 IP 段,实际上没意义,没匹配的全丢黑洞了
          "ip": [
            "0.0.0.0/8",
            "10.0.0.0/8",
            "100.64.0.0/10",
            "127.0.0.0/8",
            "169.254.0.0/16",
            "172.16.0.0/12",
            "192.0.0.0/24",
            "192.0.2.0/24",
            "192.168.0.0/16",
            "198.18.0.0/15",
            "198.51.100.0/24",
            "203.0.113.0/24",
            "::1/128",
            "fc00::/7",
            "fe80::/10"
          ],
          "outboundTag": "blocked"
        }
      ]
    }
  }
}

然后是 Clash 的配置文件

加入这些,然后配置好 proxies,proxy-groups 就行
    - 'IP-CIDR,192.168.31.1/32,DIRECT' //用于在家里直连路由器
    - 'IP-CIDR,192.168.31.1/24,🖥️ 专用服务'
    - 'DOMAIN-SUFFIX,XXXX.com,🖥️ 专用服务'
1531 次点击
所在节点    宽带症候群
3 条回复
PXW139
256 天前
如果有 NAT1,配合打洞的话好像也可以是一种内网穿透方案?
superht
256 天前
用 surge 也行。在手机上用 surge 通过 wireguard 协议连接家里内网,并添加分流策略:
wireguard 自动切换 = subnet, default = wireguard, "SSID:XXXX" = DIRECT
以及规则:
AND,((IP-CIDR,192.168.X.X/24)),wireguard 自动切换

可以实现在移动网络下,访问内网时走 wireguard ,访问互联网时走 surge 默认策略。
PXW139
255 天前
@superht wireguard 走 UDP 容易被 qos
然后是虚拟组网有点笨重,权限控制也麻烦

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/984699

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX