電訊茶室's Archiver

kingwilliam 發表於 2019-2-27 11:19

Project V:入學編

[i=s] 本帖最後由 kingwilliam 於 2019-9-7 08:06 編輯 [/i]

最後更新:2019.09.06
v2ray:v4.20.0还适用

* 因文章比较长,和会不断更新,如大家有题问或讨论,可到以下角色师兄帖子一起讨论。
* [url=http://www.telecom-cafe.com/forum/viewthread.php?tid=7386&extra=page%3D1]Project V:入学编 —— members 讨论篇[/url]

[url=http://www.telecom-cafe.com/forum/redirect.php?goto=findpost&ptid=7377&pid=46333]00 - 前言[/url]
[url=http://www.telecom-cafe.com/forum/redirect.php?goto=findpost&ptid=7377&pid=46334]01 - 序[/url]
[url=http://www.telecom-cafe.com/forum/redirect.php?goto=findpost&ptid=7377&pid=46335]02 - v2ray的基本概念[/url]
[url=http://www.telecom-cafe.com/forum/redirect.php?goto=findpost&ptid=7377&pid=46337]03 - 如何看json格式[/url]
[url=http://www.telecom-cafe.com/forum/redirect.php?goto=findpost&ptid=7377&pid=46338]04 - config.json架构[/url]
[url=http://www.telecom-cafe.com/forum/redirect.php?goto=findpost&ptid=7377&pid=46339]05 - 建立基本的“桥头堡”(inbounds and outbounds 入站与出站)[/url]
[url=http://www.telecom-cafe.com/forum/redirect.php?goto=findpost&ptid=7377&pid=46340]06 - 市内?过桥?分流(routing路由)[/url]
[url=http://www.telecom-cafe.com/forum/redirect.php?goto=findpost&ptid=7377&pid=46342]07 - 强化“桥”的基础[/url]
[url=http://www.telecom-cafe.com/forum/redirect.php?goto=findpost&ptid=7377&pid=46343]08 - routing(路由)的概念和用法[/url]
[url=http://www.telecom-cafe.com/forum/redirect.php?goto=findpost&ptid=7377&pid=46344]09 - 优化 DNS[/url]
[url=http://www.telecom-cafe.com/forum/redirect.php?goto=findpost&ptid=7377&pid=46345]10 - 拾遗[/url]
[url=http://www.telecom-cafe.com/forum/redirect.php?goto=findpost&ptid=7377&pid=46346]11 - 小結[/url]
*** 兴趣编 ***
[url=http://www.telecom-cafe.com/forum/redirect.php?goto=findpost&ptid=7377&pid=46347]13 - 反向代理[/url]
[url=http://www.telecom-cafe.com/forum/redirect.php?goto=findpost&ptid=7377&pid=46348]14 - 底层传输方式(transport)介紹[/url]
[url=http://www.telecom-cafe.com/forum/redirect.php?goto=findpost&ptid=7377&pid=46393]15 - 负载均衡器 (balancer) [/url]
[url=http://www.telecom-cafe.com/forum/redirect.php?goto=findpost&ptid=7377&pid=46394]16 - 附录[/url]
*** 参考编 ***
[url=http://www.telecom-cafe.com/forum/redirect.php?goto=findpost&ptid=7377&pid=46405]17 - WS + TLS + WEB[/url]
[url=http://www.telecom-cafe.com/forum/redirect.php?goto=findpost&ptid=7377&pid=46564]18 - (WS/H2)+ TLS + Caddy 范例[/url]
[url=http://www.telecom-cafe.com/forum/redirect.php?goto=findpost&ptid=7377&pid=46568]19 - 进行 TLS 通讯时,可以关闭 VMess 的加密[/url]
[url=http://www.telecom-cafe.com/forum/redirect.php?goto=findpost&ptid=7377&pid=47320]20 - WS + TLS + CDN(CloudFlare) + WEB[/url]
[color=Red][b] !!! 留意事项 !!![/b][/color]
[url=http://www.telecom-cafe.com/forum/redirect.php?goto=findpost&ptid=7377&pid=47366]R01 - 反向代理 或 {VPN} over dokodemo[/url]
[url=http://www.telecom-cafe.com/forum/redirect.php?goto=findpost&ptid=7377&pid=47393]R02 - 不要钻牛角尖 websocket + http/2[/url]



最後9次修改:
2019.04.17 17:23:[url=http://www.telecom-cafe.com/forum/redirect.php?goto=findpost&ptid=7377&pid=46344]09 - 优化 DNS[/url]:补充GeoDNS
2019.04.17 16:51:[url=http://www.telecom-cafe.com/forum/redirect.php?goto=findpost&ptid=7377&pid=46342]07 - 强化“桥”的基础[/url]:补充AlterId
2019.07.10 12:57:加入 [color=Red][b] !!! 留意事项 !!![/b][/color]
2019.07.10 12:57:加入 [url=http://www.telecom-cafe.com/forum/redirect.php?goto=findpost&ptid=7377&pid=46568]19 - 进行 TLS 通讯时,可以关闭 VMess 的加密[/url]
2019.07.10 14:39:[url=http://www.telecom-cafe.com/forum/redirect.php?goto=findpost&ptid=7377&pid=46342]07 - 强化“桥”的基础[/url]:删除“旧的使用手册”网址,因已不存在
2019.07.25 12:10:加入 [url=http://www.telecom-cafe.com/forum/redirect.php?goto=findpost&ptid=7377&pid=47320]20 - WS + TLS + CDN(CloudFlare) + WEB[/url]
2019.07.25 15:48:[url=http://www.telecom-cafe.com/forum/redirect.php?goto=findpost&ptid=7377&pid=46345]10 - 拾遗[/url]:补充Log
2019.08.13 20:07:[url=http://www.telecom-cafe.com/forum/redirect.php?goto=findpost&ptid=7377&pid=46345]10 - 拾遗[/url]:加入inbounds listen和outbounds sendThrough
2019.08.13 20:38:[url=http://www.telecom-cafe.com/forum/redirect.php?goto=findpost&ptid=7377&pid=47393]R02 - 不要钻牛角尖 websocket + http/2[/url]

kingwilliam 發表於 2019-2-27 11:20

[i=s] 本帖最後由 kingwilliam 於 2019-3-1 12:06 編輯 [/i]

00 - 前言

如这个贴文遗返了版规,请通知删除,谢谢。

以下贴文我会尽我所能浅白,但始终会有技术部分,如 端口53是甚麽, 甚麽是1.1.1.1, 114.114.114.114。所以大家往下看时 最好对网络已有一些基本认识。

kingwilliam 發表於 2019-2-27 11:21

[i=s] 本帖最後由 kingwilliam 於 2019-4-17 16:58 編輯 [/i]

01 - 序

为何会选写这个Project V“入学编”,因自己做过小白(现在还是小白),但project V出了名是“超级复杂”,“超级难用”,所以常试用小白的角度出发 等大家容易明白 组合自己的project V客户和服务器。

这编内容只会集中Project V(或v2ray)内的config.json设定,而前期的系统安装和最後 终极客户端“透明代理” 和 终极服务器“如何用WS+TLS+WEB将v2ray服务器隠藏於网页後”这些高阶设定 网络上已有高人指路 小白我就不此在班门弄斧 所以只会有“入学编”。

kingwilliam 發表於 2019-2-27 11:22

[i=s] 本帖最後由 kingwilliam 於 2019-8-22 17:27 編輯 [/i]

02 - v2ray的基本概念

*** 图01 ***
[attach]4308[/attach]

v2ray最基本 要1个客户 和 1个服务器 组成

v2ray当然是要用来吸收“其他文明”(我暂称呼“郊外”)的知识,所以最少要在郊外的地方设置1个 服务器 做接应。而“本土文明”(我暂称呼”市内”),也要步署1个 客户 才可成事。

所以曾经有人在市内问“我手机已安装v2rayNG,为何还是不能呼吸郊外的空气”,就因为郊外没有设置 服务器 对应,所以用不了。

市内,郊外 已交代
河,桥 意会吧
桥头堡 河两边的v2ray

大家看见 两边的桥头堡 都会有 入 和 出

如要用文子表述 入 和 出

市内
入 - 接收 要求(发出的可以是手机 也可以是电脑)
出 - 把 入 的要求 经过加密後 过桥。

郊外
入 - 接收由 桥 过来的 要求 後解密。
出 - 处理 市内 入 的 要求,找到後原路返回。

kingwilliam 發表於 2019-2-27 11:25

[i=s] 本帖最後由 kingwilliam 於 2019-2-28 21:19 編輯 [/i]

03 - 如何看json格式

config.json 是用json格式[code]{
  "inbounds": [
    {
      "port": 1080, // 监听端口
      "protocol": "socks" // 入口协议为 SOCKS 5
    }
  ],
  "outbounds": [
    {
      "protocol": "shadowsocks",
      "settings": {
        "servers": [
          {
            "address": "serveraddr.com", // Shadowsocks 的服务器地址
            "method": "aes-128-gcm", // Shadowsocks 的加密方式
            "password": "sspasswd", // Shadowsocks 的密码
            "port": 1024  
          }
        ]
      }
    }
  ]
}[/code]如大家第一次接触json格式,好多时都会碰到 括号不对 豆号不对 就上面的例子是json的直式,如简略到横式 就会容易明白。

以下开始慢慢解说上面的例子:
1. 开始头尾都要有 括号[code]{}[/code]2. 开始加入一组设定,如我给这个设定名 甲[code]{甲}[/code]3. 如要加多一组设定 乙,需要用豆号分格[code]{甲,乙}[/code]4. 如甲="inbounds":[] 乙="outbounds":[][code]{"inbounds":[],"outbounds":[]}[/code]5. 如我要在inbounds内加入两组设定 丙和丁[code]{"inbounds":[丙,丁],"outbounds":[]}[/code]6. 如丙="port":1080 丁="protocol":"socks"[code]{"inbounds":["port":1080,"protocol":"socks"],"outbounds":[]}[/code]7. 如我要在outbounds再内加 戊,。。。。等等,太长了很难处理,所以要由横式转直式[code]横
{"inbounds":["port":1080,"protocol":"socks"],"outbounds":[戊]}


{
   "inbounds":[
      "port":1080,
      "protocol":"socks"
   ],
   "outbounds":[
      戊
   ]
}[/code]这样大家是否容易理解。

kingwilliam 發表於 2019-2-27 11:35

[i=s] 本帖最後由 kingwilliam 於 2019-3-1 11:20 編輯 [/i]

04 - config.json 架构

因v2ray成长太快,以下是以2019.02.27选写时的 config.json 架构[code]{
  "log": {},
  "api": {},
  "dns": {},
  "stats": {},
  "routing": {},
  "policy": {},
  "reverse": {},
  "inbounds": [],
  "outbounds": [],
  "transport": {}
}[/code]客户端 和 服务器端 都是同一套config.json 架构(但内容是有不同,後文详述)

如只想到郊外呼吸一下清新空气,只需在 客户端 和 服务器 各自建立最基本的 inbounds 和 outounds 就成.
=== code00-basic ===[code]{
  "inbounds": [],
  "outbounds": []
}[/code]

kingwilliam 發表於 2019-2-27 11:35

[i=s] 本帖最後由 kingwilliam 於 2019-3-1 11:28 編輯 [/i]

05 - 建立基本的“桥头堡”(inbounds and outbounds 入站与出站)

“桥”的两端 即是 市内的出 和 郊外的入 protocol, id, port 两端必需一至,

=== 客户端 outbounds 出 的例子 ===
=== code01-client-out ===[code]
"outbounds": [
   {
      "protocol": "vmess",
      "settings": {
         "vnext": [{
            "address": "server", // 服务器地址
            "port": 10086,  // 服务器端口
            "users": [{ "id": "b831381d-6324-4d53-ad4f-8cda48b30811" }]
          }]
      }
   }
]
[/code]=== 服务器 inbounds 入 的例子 ===
=== code01-server-in ===[code]
"inbounds": [
   {
      "protocol": "vmess",
      "port": 10086, // 服务器监听端口
      "settings": {
         "clients": [{ "id": "b831381d-6324-4d53-ad4f-8cda48b30811" }]
      }
   }
]
[/code]- Protocol:可参考官网的 [url=https://www.v2ray.com/chapter_02/02_protocols.html]协议列表[/url]
但现今河水越来越高 VMess 是今天比较稳妥的协议(到2019.02.28今天还是).
其他的协议 有兴趣的 可到官网了解。

- 服务器地址 和 服务器端口:不用说吧

- id:是甚麽?你可视为密码 但不是随意乱打的, v2ray本身已有一个uuid生成器,  上网也可找到很多的[code]v2ctl uuid[/code]现在“桥”已建成,到开门给进出

先讲 郊外 那边的出口,因真的太简单
=== code01-server-out ===[code]
"outbounds": [
   {
      "protocol": "freedom"
   }
]
[/code]只有这麽多,就是 自由吧。

到市内那边的入口(如您是用手机就不用设定这边的入站协议)。
=== code01-client-in ===[code]
"inbounds": [
   {
      "protocol": "socks",
      "port": 1080
   }
]
[/code]protocol:客户端入站一般都是 socks,http或dokodemo 现在先用socks做例

好了 所有入站和出站协议都已建立完成,开始合体
由 服务器 开始
张 code00-basic + code01-server-in + code01-server-out
=== code01-server-semifinal ===[code]{
   "inbounds": [code01-server-in],
   "outbounds": [code01-server-out]
}[/code]客户端
张 code00-basic + code01-client-in + code01-client-out
=== code01-client-semifinal ===[code]{
   "inbounds": [code01-client-in],
   "outbounds": [code01-client-out]
}[/code]*
*
*
*
*
=== code01-server-final === 服务器 完成[code]{
   "inbounds": [
      {
         "protocol": "vmess",
         "port": 10086, // 服务器监听端口
         "settings": {
            "clients": [{ "id": "b831381d-6324-4d53-ad4f-8cda48b30811" }]
         }
      }
   ],
   "outbounds": [
      {
         "protocol": "freedom"
      }
   ]
}[/code]*
*
*
*
*
=== code01-client-final === 客户端 完成[code]{
   "inbounds": [
      {
         "protocol": "socks",
         "port": 1080
      }
   ],
   "outbounds": [
      {
         "protocol": "vmess",
         "settings": {
            "vnext": [{
               "address": "server", // 服务器地址
               "port": 10086,  // 服务器端口
               "users": [{ "id": "b831381d-6324-4d53-ad4f-8cda48b30811" }]
             }]
         }
      }
   ]
}[/code]上面2组代码,就是v2ray最基本的config.json设定档,已經可以运行。

kingwilliam 發表於 2019-2-27 11:36

[i=s] 本帖最後由 kingwilliam 於 2019-3-4 11:41 編輯 [/i]

06 - 市內?过桥?分流(routing路由)

上一个贴子"05 - 建立基本的“桥头堡”(inbounds and outbounds 入站与出站)"已可自由过河,但就是全都过了河,如要淘宝(因过了河,超慢)丶看爱奇艺(更说我所在地区受限不能看)。

*** 图02 ***
[attach]4307[/attach]

如 图02 在 客户端 出站前加1个路由,凡是 市内的网址 或 市内的IP地址 就直接在市内出站不用过桥,馀下的全都过桥由郊外那边出站。

=== code02-client-out ===[code]
{
        "protocol": "freedom",
        "settings": {}
}
[/code]首先要在 outbounds 出站处加入一个新的出站口,目的是处理市内直连的要求。而这个出站口一定要处於现有的出站口下方。因v2ray outbounds 第一个出站口是有default即 预设 的意思。

因现在出口已多於1个,要为每个出口设定一个标签,用於之後路由设定。
=== 以下是 code01-client-out + code02-client-out ===
=== code02-client-out02 ===[code]
"outbounds": [
   {
      "tag": "defaultout",
      "protocol": "vmess",
      "settings": {
         "vnext": [{
            "address": "server", // 服务器地址
            "port": 10086,  // 服务器端口
            "users": [{ "id": "b831381d-6324-4d53-ad4f-8cda48b30811" }]
          }]
      }
   },
   {
      "tag": "direct",
      "protocol": "freedom",
      "settings": {}
   }
]
[/code]上面的 代码 看见"tag" 就是给那组设定一个标签
过桥的那个出口我给了 "defaultout"
新的市内出口我给了 "direct"

现在加入路由设定
=== code02-client-routing00 ===[code]"routing": {
   "domainStrategy": "IPOnDemand",
   "rules": []
}[/code]domainStrategy: 有3个选择 "AsIs" | "IPIfNonMatch" | "IPOnDemand"
如想进一步了解如何运用, 可到[url=https://www.v2ray.com/chapter_02/03_routing.html]官网[/url]了解

以下的代码是所有 市内 常用域名 全都用 "direct" 这个出口
=== code02-client-routing01 ===[code]{
   "type": "field",
   "domain": [
      "geosite:cn"
   ],
   "outboundTag": "direct"
}[/code]"type" : 目前只支持"field"这一个选项。
"domain" : 详情请参考官网 [url=https://www.v2ray.com/chapter_02/03_routing.html#ruleobject]RuleObject[/url]
"outbountTag" : 就是附合上面条件的都用"direct"这个出口
"geosite:cn" : 不是 .com.cn 或 .cn 意思. geosite和下面张会出现的 geoip 都是project V一个特殊功能,cn是指一般常用的市内网站,详情请参考官网 [url=https://www.v2ray.com/chapter_02/03_routing.html#dlc]预定义域名列表[/url]

以下的代码是所有 市内 的IP地址 和 一些私有地址 全都用 "direct" 这个出口
=== code02-client-routing02 ===[code]
{
   "type": "field",
   "ip": [
      "geoip:cn",
      "geoip:private"
   ],
   "outboundTag": "direct"
}
[/code]留意 今次是 "IP" 做路由条件
"geoip:cn" : 是市内 ip
"geoip:private" : 是私有地址(即192.168, 172.16 那些)

好了 所有路由设定已建立完成,开始合体
张 code02-client-routing00 + code02-client-routing01 + code02-client-routing02
=== code02-client-routing-semifinal ===[code]"routing": {
   "domainStrategy": "IPOnDemand",
   "rules": [
      code02-client-routing01,
      code02-client-routing02
   ]
}[/code]*
*
*
*
*
=== code02-client-routing-final ===[code]"routing": {
   "domainStrategy": "IPOnDemand",
   "rules": [
      {
         "type": "field",
         "domain": [
            "geosite:cn"
         ],
         "outboundTag": "direct"
      },
      {
         "type": "field",
         "ip": [
            "geoip:cn",
            "geoip:private"
         ],
         "outboundTag": "direct"
      }
   ]
}[/code]*
*
*
*
*
这样 客户端 就可市内直连,馀下的就全都过桥由郊外那边出站。
现在可张 code02-client-rounting-final 放入之前的 code01-client-final
=== code02-client-final ===[code]{
   "inbounds": [
      {
         "protocol": "socks",
         "port": 1080
      }
   ],
   "outbounds": [
      {
         "tag": "defaultout",
         "protocol": "vmess",
         "settings": {
            "vnext": [{
               "address": "server", // 服务器地址
               "port": 10086,  // 服务器端口
               "users": [{ "id": "b831381d-6324-4d53-ad4f-8cda48b30811" }]
             }]
         }
      },
      {
         "tag": "direct",
         "protocol": "freedom",
         "settings": {}
      }
   ],
   "routing": {
      "domainStrategy": "IPOnDemand",
      "rules": [
         {
            "type": "field",
            "domain": [
               "geosite:cn"
            ],
            "outboundTag": "direct"
         },
         {
            "type": "field",
            "ip": [
               "geoip:cn",
               "geoip:private"
            ],
            "outboundTag": "direct"
         }
      ]
   }
}[/code]

kingwilliam 發表於 2019-2-27 14:13

[i=s] 本帖最後由 kingwilliam 於 2019-8-23 10:57 編輯 [/i]

07 - 强化“桥”的基础

继续深化前,先强化“桥”的基础。
我相信大家都看过 官网 和 白话文教程 无数次,大家都会看到我的vmess vnext users设定代码只有id一项,应该还有其他的。

对!现在再多加3个选顼,alterid丶security和level
=== 客户端 出 的例子 ===
=== code03-client-out ===[code]
"outbounds": [
   {
      "protocol": "vmess",
      "settings": {
         "vnext": [{
            "address": "server", // 服务器地址
            "port": 10086,  // 服务器端口
            "users": [
               {
                  "id": "b831381d-6324-4d53-ad4f-8cda48b30811",
                  "alterid": 4,
                  "security": "auto",
                  "level": 0
               }
            ]
         }]
      }
   }
]
[/code]=== 服务器 inbounds 入 的例子 ===
=== code03-server-in ===[code]
"inbounds": [
   {
      "protocol": "vmess",
      "port": 10086, // 服务器监听端口
      "settings": {
         "clients": [
            {
               "id": "b831381d-6324-4d53-ad4f-8cda48b30811",
               "alterid": 64,
               "level": 0
            }
         ]
      }
   }
]
[/code]- "alterid: 有甚麽用?在一份旧的使用手册有以下描述:
[list]
[*]VMess 依赖于系统时间,请确保使用 V2Ray 的系统 UTC 时间误差在 90 秒之内。
[*]时间戳的取值范围只有 60 个值,当客户端产生大量数据请求时,部分请求可能会使用了相同的时间戳,进而产生相同的认证信息。在这种情况下,通讯数据有可能被模式识别。为了降低可识别性,VMess 配置中有一个 alterId 设置。如果 alterId > 0,VMess 在当前 ID 的基础上自动生成 alterId 个不同的 ID,并用于通讯。alterId 的值越大,认证信息重复的概率就越小。实际的 alterId 值可以根据你的上网情况推算出来,一般的网页浏览平均每秒打开最多一个网页,平均一个网页发起 10 个连接,那么 alterId 的值设为 10 即可。
[/list]
所以官网就直接地[b]不要问,只要做[/b]
[list]
[*]“为了进一步防止被探测,一个用户可以在主 ID 的基础上,再额外生成多个 ID。这里只需要指定额外的 ID 的数量”。但客户端一定要小过服务器,建议 服务器:64,客户:4
[/list]

- "secureity: [i]这选项只需设在客户端,服务器自行适应。[/i]有4个选择 "aes-128-gcm" | "chacha20-poly1305" | "auto" | "none",官网建议"auto",但喜欢自行选择也没太大关系。

- "level": 官网也没多话说, 是要配合 "policy" 这个选项,就可不同users有不同的设定,如level:1 buffer可有10MB,但level:2的就只有2MB。

因level用的机会不多,就在这轻轻带过。
=== 以下是 "policy" 的例子 ===[code]"policy": {
   "levels": {
      "0": {
         "handshake": 4,
         "connIdle": 300,
         "uplinkOnly": 10,
         "downlinkOnly": 10,
         "statsUserUplink": false,
         "statsUserDownlink": false,
         "bufferSize": 10240
      }
      "1": {
         "handshake": 4,
         "connIdle": 300,
         "uplinkOnly": 2,
         "downlinkOnly": 2,
         "statsUserUplink": false,
         "statsUserDownlink": false,
         "bufferSize": 10240
      }
   },
   "system": {
      "statsInboundUplink": false,
      "statsInboundDownlink": false
   }
}
[/code]*
以上3项,可到 [url=https://www.v2ray.com/chapter_02/protocols/vmess.html#userobject]官网[/url] 再详细了解


住下走,继续强化“桥”,加入WS+TLS

v2ray 除了 ws+tls 之外比较安全的个人会选HTTP/2。但“mkcp”和“HTTP 伪装”个人就不太建议,为何?官网这样说“。。。mKCP 牺牲带宽来降低延迟。。。一般比 TCP 消耗更多的流量”我曾试个用traffic monitor观察过,“消耗更多的流量”是去到惊吓情况,不值得。(抱歉 已离题!)

现在来回桥的资料已给vmess加了密(我暂用“散装货”形容),如有 海盗 在河上要检查过桥的包裹是看不到甚麽的,但包裹一定会有 寄件者 和 收件者资料(当然是IP地址)如果 海盗 也有大数据,他们会发现为何郊外那边的地址全都是“散装货”。

好 场景说完,现在说如何由“散装货”(普通加密资料)转到“集装箱”(广范采用的https 是真正的tls加密资料 不是伪装)好浑水模鱼骗过海盗。
有句话“做戏要做全”首先要申请一个网域".com .site .info"甚麽也可以。(如何申请网域丶寄存丶更新DNS,可问 谷哥)[url=https://www.sslforfree.com]SSL FOR Free[/url]  可在这申请免费电子证书。每3个月续1次



以下客户例子是在上面 code03-client-out 加入streamsettings
=== 客户端 出 的例子 ===
=== code03-client-out02 ===[code]
"outbounds": [
   {
      "protocol": "vmess",
      "settings": {
         "vnext": [{
            "address": "server", // 服务器地址
            "port": 10086,  // 服务器端口
            "users": [
               {
                  "id": "b831381d-6324-4d53-ad4f-8cda48b30811",
                  "alterid": 4,
                  "security": "auto",
               }
            ]
         }]
      },
      "streamSettings": {
         "network": "ws",
         "security": "tls",
         "tlsSettings": {
            "allowInsecure": true
         },
         "wsSettings": {
            "path": "/freepath/"
         }
      }
   }
]
[/code]- "network": "ws" 是指http升级到wetsocks
- "security": "tls" 是指用tls做加密
- "allowinsecure": "true" 不会检查远端主机所提供的 TLS 证书的有效性。
- "path": "/freepath/" 加强安全性,内容随意,但客户和服务器两边必需一致。



=== 服务器 inbounds 入 的例子 ===
=== code03-server-in02 ===[code]
"inbounds": [
   {
      "protocol": "vmess",
      "port": 10086, // 服务器监听端口
      "settings": {
         "clients": [
            {
               "id": "b831381d-6324-4d53-ad4f-8cda48b30811",
               "alterid": 64,
               "level": 0
            }
         ]
      },
      "streamSettings": {
         "network": "ws",
         "security": "tls",
         "tlsSettings": {
            "certificates": [
               {
                  "certificateFile": "/etc/v2ray/cert.crt",
                  "keyFile": "/etc/v2ray/key.key"
               }
            ]
         },
         "wsSettings": {
            "path": "/freepath/"
         }
      }
   }
]
[/code]服务器这边就多了"certificates"就是证书和密钥

现在过“桥”的资料包已用广范采用的https(WS+TLS)处理。如想再進一步强化,就是在v2ray服務器前安装两层保护层,可以尽量降低避探测和攻击的机会。

這两层是 reverse proxy(反向代理)和 web server(真正的网站) 流程会是 互联网>反向代理>网站>v2ray
- 反向代理:好处是1个IP,在同1个443端口可以有限多服务器,同時保护网站。(如何保护网站,有机会再详述)
- 网站:是用来隐藏背後的v2ray。(留代最後附录才簡述)

“ 终极服务器”就留给各位折腾吧。 现在继续上路。

kingwilliam 發表於 2019-2-27 14:14

[i=s] 本帖最後由 kingwilliam 於 2019-10-4 08:51 編輯 [/i]

08 - routing(路由)的概念和用法

如有编程经验的人一定会用过

if... 或 case 这类指令 简单描述就是 符合条件就做甚麽

例[code]case
   您的年龄 <=6岁 就是"小朋友"
   您是“男” 就是“哥哥”
   您是“女” 就是“姐姐”
endcase
[/code]上面的例子就由上而下

如果您是6岁或以下,不轮男女 第一条件已符合 就是 “小朋友”,任务已完成会直接跳到endcase

如果您已是一位美美 第一条件不符合,就看第二条件,如都不符合 就到第三条件。

如是这般


但也要留意[code]case
   您是“男” 就是“哥哥”
   您是“女” 就是“姐姐”
   您的年龄 <=6岁 就是"小朋友
Endcase[/code]如上面这例 指令一样 只是先後有异 就会是另一个境况。就是永远不会有 小朋友 只有男或女。


好 为何routing会说到编程。看看下面routing例子
=== 这是上面出现过的 code02-client-routing-final ===[code]"routing": {
   "domainStrategy": "AsIs",
   "rules": [
      {
         "type": "field",
         "domain": [
            "geosite:cn"
         ],
         "outboundTag": "direct"
      },
      {
         "type": "field",
         "ip": [
            "geoip:cn",
            "geoip:private"
         ],
         "outboundTag": "direct"
      }
   ]
}[/code]*

=== code02-client-out02 ===[code]
"outbounds": [
   {
      "tag": "defaultout",
      "protocol": "vmess",
      "settings": {
         "vnext": [{
            "address": "server", // 服务器地址
            "port": 10086,  // 服务器端口
            "users": [{ "id": "b831381d-6324-4d53-ad4f-8cda48b30811" }]
          }]
      }
   },
   {
      "tag": "direct",
      "protocol": "freedom",
      "settings": {}
   }
]
[/code]在上文 code02-client-out02 已提及
outbounds 第一个出站口是有default即 预设 的意思。

如在 code02-client-routing-final 这个例子,如去 taobao.com 就会在条件1时就已去了"direct"出口"。
但如果要去 google.com,就因条件1和2都不符合,就会没条件符合而出了routing,这时就会用outbounds第一个出站口 即 预设 出站。

kingwilliam 發表於 2019-2-27 14:14

[i=s] 本帖最後由 kingwilliam 於 2019-4-17 17:22 編輯 [/i]

09 - 优化 DNS

在章节 “06 - 市内?过桥?分流(routing路由)”已提及过“因全都过了河,如要淘宝(因过了河,超慢)丶看爱奇艺(更说所在地区受限不能看)。”所以“在 客户端 出站前加1个路由,凡是 市内的网址 或 市内的IP地址 就直接在市内出站不用过桥,馀下的全都过桥由郊外那边出站。”

理论上已是完美,但不是。因现在上网是访问 郊外的DNS 取网站ip地址,问题就在这。因DNS会跟据您的IP 位置回报最近的伺服器IP(这服务叫GeoDNS - 可参考“[url=http://support.unethost.com/knowledgebase.php?action=displayarticle&id=136]什麽是GeoDNS?[/url]”)。所以 如果在访问DNS前 就跟据访问的网站分流 市内 的就访问市内DNS,馀下就访问郊外那边DNS 。这样就真的非常完满。

例如:百度 [url]www.baidu.com[/url]
由114.114.114.114回来的是 104.193.88.77 或 104.193.88.123[code]> www.baidu.com
Server:  public1.114dns.com
Address:  114.114.114.114

Non-authoritative answer:
Name:    www.wshifen.com
Addresses:  104.193.88.77
          104.193.88.123
Aliases:  www.baidu.com
          www.a.shifen.com
[/code]但 1.1.1.1 回来的是 103.235.46.39[code]> www.baidu.com
Server:  one.one.one.one
Address:  1.1.1.1

Non-authoritative answer:
Name:    www.wshifen.com
Address:  103.235.46.39
Aliases:  www.baidu.com
          www.a.shifen.com
[/code]在上面两个dns访问就会发现 市内dns回应和郊外的dns是有不同 这就会影响上网质素。

所以Project V团队在v2ray内加入一个dns服务模组做dns分流。[code]"dns": {
   servers": [
      {
         "address": "114.114.114.114",
         "port": 53,
         "domains": ["geosite:cn"]
      },
      1.1.1.1
   ]
}
[/code]如何解读这组代码? 如要找的网域是 市内 就用114.114.114.114 其他就用1.1.1.1。

所以 v2ray 内置dns 有1个参数 "clientip" 就是通知dns你的位置。一般情况下是不用设置。

想详细了解v2ray的dns运作,可参考 [url=https://medium.com/@TachyonDevel/漫谈各种黑科技式-dns-技术在代理环境中的应用-62c50e58cbd0]漫谈各种黑科技式 DNS 技术在代理环境中的应用[/url]

kingwilliam 發表於 2019-2-27 14:14

[i=s] 本帖最後由 kingwilliam 於 2019-9-6 21:22 編輯 [/i]

10 - 拾遗

1。v2ray内是有log这个功能,为何放到最後,因没事时真的没用,但要他的时候又真的很有用。

没甚特别,初学时真的log也可以没有。[code]
{
  "access": "文件地址" | "none",
  "error": "文件地址" | "none",
  "loglevel": "debug" | "info" | "warning" | "error" | "none"
}

文件地址格式:
(Linux):"/var/log/v2ray/_access.log"
(Windows):"C:\\Temp\\v2ray\\_access.log" <- 沒打錯,真的要用 \\
[/code]官网也说得很清楚 [url=https://www.v2ray.com/chapter_02/01_overview.html#logobject]LogObject[/url]


2。还有一个 可能已给放弃的功能(因官网也找不到)“[url=https://toutyrater.github.io/advanced/dynamicport.html]动态端口[/url]”,现在只可在“白话文教程”内找到解说。这个功能我也曾深研,也用过一个短时间,最後也给放弃。有兴趣的 可到“白话文教程”了解。

3。Mux:“是为了减少 TCP 的握手延迟而设计,而非提高连接的吞吐量。使用 Mux 看视频丶下载或者测速通常都有反效果。Mux 只需要在客户端启用,服务器端自动适配”。官网已说明了,不用再解说。
[list]
[*]但mux有甚麽用?可用“减少连接数量”理解。
[*]例:有一网页index.html, 内有6个jpg要下载,这样客户端会问服务器取7(1个html+6个jpg)个档案,每下载一次,都会制做1个连接,如mux这时设定8,这时1个连接就可以。如有9个jpg,因这时要取10个档案,所以要制做2个连接。
[*]启动与否,连接数量,视各自情况决定,没有准则。
[/list]

4。如系統有多個1個ip地址可用時,"inbounds"可用"listen"指定那個ip用那個port入站,"outbounds"可用"sendThrough"指定用那個ip出站.

範例:[code]"inbounds": [
        {
                "tag": "in01",
                "listen": "10.0.0.1",
                "port": 443,
                ...
        },
        {
                "tag": "in02",
                "listen": "10.0.0.2",
                "port": 443,
                ...
        }
],

"outbounds": [
        {
                "tag": "out01",
                "sendThrough": "10.0.0.3",
                ...
        },
        {
                "tag": "out02",
                "sendThrough": "10.0.0.4",
                ...
        }
][/code]上面的范例就是 10.0.0.1和 10.0.0.2 负责入站。 10.0.0.3 和 10.0.0.4 就负责出站。

5。"api","stats","transport" 这3个功能  自问因没了解过,所以就不写了。

kingwilliam 發表於 2019-2-27 14:14

[i=s] 本帖最後由 kingwilliam 於 2019-3-7 18:26 編輯 [/i]

11 - 小结

到这里 桥 已建好,出郊外已可畅通无阻(但天朝要下雨,可水上涨关桥,就另作别论)

再住下走,就已离开入学范围,进入“兴趣编”。

kingwilliam 發表於 2019-2-27 14:15

[i=s] 本帖最後由 kingwilliam 於 2019-7-10 12:52 編輯 [/i]

13 - 反向代理

这个功能不止官网所说只是连接回家看看那个伺服器那麽简单。

这个功能最大的好处就是市内的“桥头堡”没有真正IP,路由也不能“端口影射”。就可靠这个“反向代理”功能,在郊外也可看市内的“爱奇艺”。

*** 图03 ***
[attach]4313[/attach]
上图正是官网所说的 多入站,多路由,多出站 架构

也是我现用 反向代理 的架构图。由两座桥组成,预设那座是一般由市内出郊外用的。反向那座是给郊外入市内用的。
*** 如有师兄可以用一座桥完城 请告知 *** 因我试了很多不同组合,但都有不同问题,两座桥的组合暂时发觉是最稳定。

因代码有点长,所以分了段落和简化。
先上客户端
=== code04-client-inbound ===[code]"inbounds": [
   {
      "protocol": "socks",
      "port": 1080
   }
]
[/code]只是一般入站代码

=== code04-client-reverse ===[code]"reverse": {
   "bridges":[  
      {  
         "tag":"bridge",
         "domain":"reverse.tunnel.projectv"
      }
   ]
}
[/code]这段就是 触发 反向代理的代码
"domain": 是给服务器那边 识认 这是一个反向代理的標籤,所以要给一个两边一至不存在的域名。


=== code04-client-routing ===[code]"routing": {
   "domainStrategy": "IPOnDemand",
   "rules": [
      {
         "type": "field",
         "inboundtag": [
            "bridge"
         ],
         "domain": [
             "full:reverse.tunnel.projectv"
         ],
         "outboundTag": "tunnel"
      },
      {
         "type": "field",
         "inboundTag": [
            "bridge"
         ],
         "outboundTag": "direct"
      },
      {
         "type": "field",
         "domain": [
            "geosite:cn"
         ],
         "outboundTag": "direct"
      },
      {
         "type": "field",
         "ip": [
            "geoip:cn",
            "geoip:private"
         ],
         "outboundTag": "direct"
      }
   ]
}[/code]内有四组路由,第三四组是基本的,第一组路由解读是“inbound是bridge时,带着reverse.tunnel.projectv时就走 tag:tunnel出站”建立反向代理
第二组解读是“inbound是bridge时就走tag:direct出站”这组意思是,由郊外入来的都在市内出站。
*** 迟些再补充 ***


=== code04-client-outbound ===[code]"outbounds": [
   {
      "tag": "defaultout",
      "protocol": "vmess",
      "settings": {
         "vnext": [
            {
               "address": "address",
               "port": 443,
               "users": [
                  {
                     "id": "id"
                  }
               ]
            }
         ]
      }
   },
   {
      "tag": "tunnel",
      "protocol": "vmess",
      "settings": {
         "vnext": [
            {
               "address": "server",
               "port": 443,
               "users": [
                  {
                     "id": "id"
                  }
               ]
            }
         ]
      }
   },
   {
      "tag": "direct",
      "protocol": "freedom",
       "settings": {}
   }
]
[/code]出站有3组 第三组freedom不用说,第一二组给是建立 预设 和 反向 的出站。





服務器
=== code04-server-reverse ===[code]
"reverse": {
   "portals":[  
      {  
         "tag":"portal",
         "domain":"reverse.tunnel.projectv"
      }
   ]
}
[/code]domain:用來識別市內發出建立反向代理的標籤


=== code04-server-inbound ===[code]"inbounds": [
   {
      "tag": "defaultin"
      "port": 44303,
      "protocol": "vmess",
      "settings": {
         "clients": [
            {
               "id": "id",
               "alterId": 64,
               "level": 1
            }
         ]
      }
   },
   {
      "tag": "tunnel",
      "port": 44305,
      "protocol":"vmess",
      "settings":{  
         "clients":[  
            {  
               "id": "id",
               "alterId":64,
               "level": 1
            }
         ]
      }
   },
 {
  "protocol": "socks",
  "port": 1080
 },
]
[/code]預設 和 反向 的入站口 和 socks入站


=== code04-server-routing ===[code]"routing": {
   "domainStrategy": "IPOnDemand",   
   "rules": [
      // connect from cn
      {
         "type":"field",
         "inboundTag":[
            "tunnel"
         ],
         "outboundTag":"portal"
      },

      // domain to cn
      {
         "type": "field",
         "domain": [
            "domain:iqiyi.com"
         ],
         "outboundTag": "portal"
      }
   ]
},
[/code]第一組路由解讀“由tunnel來的 就由portal回應” 接受市內要求 建立反向
第二組路由解讀“如果有iqiyi.com要求 就由portal出站” (需然這邊是郊外,但一樣可以有socks入站)


=== code04-server-outbounds ===[code]"outbounds": [
   {
      "tag": "direct",
      "protocol": "freedom",  
      "settings": {}
   }
]
[/code]。。。後续。。。

kingwilliam 發表於 2019-2-27 14:15

[i=s] 本帖最後由 kingwilliam 於 2019-9-6 21:10 編輯 [/i]

14 - 底层传输方式(transport)介绍

{
  "tcpSettings": {},
  "kcpSettings": {},
  "wsSettings": {},
  "httpSettings": {},
  "dsSettings": {},
  "quicSettings": {}
}

底层传输 可分udp,tcp 和 domainsocket
udp 有 quic, kcp
tcp 有 tcp, wetsocket, http2
domainsocket
[list]
[*]如果你的网络支援udp(指你的网路供应商没有给udp设定qos),个人会建议用quic(个人不建议用kcp)
[*]kcp/mkcp:上网经常看见一时kcp,一时mkcp,但kcp和mkcp是甚麽?有甚麽分别?可以理解成“UDP伪装TCP流量”,官网是这样说明“V2Ray 引入了 KCP 传输协议,并且做了一些不同的优化,称为 mKCP。要了解的一点是,mKCP 与 KCPTUN 同样是 KCP 协议,但两者并不兼容。”这样就全明白了。
[*]如更想了解kcp多一点,可参考 [url=https://blog.chionlab.moe/2017/04/06/kcptun-with-fake-tcp/]kcptun-raw:应对UDP QoS,重新实现kcptun的一次尝试[/url]
[*]tcp和wetsocket(WS) 个人建议,最好加入TLS一起运用(个人不建议单独tcp+伪装或单独WS)。或用http2
[*]domainsocket:个人功力不够,还在参详中。有兴趣可参考下面网页。
[/list]
[url]https://kkdev.org/post/what-is-unix-domain-socket/[/url]
[url]https://github.com/v2ray/discussion/issues/16[/url]

需然个人会比较用喜欢用TLS搭桥,同时也会建议用TLS。但很久前SS作者也论及应否用https搭桥。
[url=https://gist.github.com/clowwindy/5947691]为什么不应该用 SSL 翻墙[/url](补充:文章日期是2013年)
[url=https://github.com/shadowsocks/shadowsocks-org/issues/48]为什么应该用 SSL 翻墙[/url]

喜欢如何运用v2ray搭桥过河,就留给大家“八仙过海 各显神通”

角色 發表於 2019-2-27 14:24

谢谢CHing能抽出非常宝贵的时间为了一些我们走过小白的阶段,从不同角度去探讨怎样使用Project V中的V2Ray。其实我写透明代理都是得到师兄的提点才能成功,不然光看官网和白话文都实现不出来,特别是官网,很多都没有例题,当时看真的看不懂官网,幸好有白话文才能懂一点点,现在呢?比我之前好很多!只要有像CHing这样无私奉献,让很多小白(像我之前的我)都能获益不浅!!!

大家小白(包括我)不懂的地方可以跟帖讨论,那么大家学起来就比较有趣。

kingwilliam CHing 加油!

vpn-learner 發表於 2019-2-28 23:20

[b]回復 [url=http://www.telecom-cafe.com/forum/redirect.php?goto=findpost&pid=46337&ptid=7377]5#[/url] [i]kingwilliam[/i] [/b]


    请教师兄,config.json 中的逗号 和 括号 有什么要注意的地方? 我是过在加 shadowsocks 和 Vmess 账号时,就不成功,也不知自己错在哪里?!
网上的教程我又不太了解, 像我这样的小白很难明白!@-@
望师兄指教。谢谢!

kingwilliam 發表於 2019-3-1 06:31

[i=s] 本帖最後由 kingwilliam 於 2019-3-1 07:15 編輯 [/i]

[b]回復 [url=http://www.telecom-cafe.com/forum/redirect.php?goto=findpost&pid=46357&ptid=7377]17#[/url] [i]vpn-learner[/i] [/b]


    可否張你有問題的 代碼 放上來, 一齊研究.

記得先刪除 服務器 端口 密碼 這些參數

kingwilliam 發表於 2019-3-7 18:27

[i=s] 本帖最後由 kingwilliam 於 2019-8-24 07:41 編輯 [/i]

15 - 负载均衡器 (balancer)

如果您 郊外 有多於1個 服務器 就可運用“负载均衡器”這功能,分散運用,避免長期使同用1個郊外服務器。

先在client outbounds建立所有郊外服務器資料。[code]"outbounds": [
   {
      "tag": "svr1",
      ...
   },
   {
      "tag": "svr2",
      ...
   },
   {
      "tag": "svr3",
      ...
   }
]
[/code]再在routing建立balancers group和routing rules,[code]"routing": {
   "balancers": [
      {
         "tag": "group1",
         "selector": [
            "svr1",
            "svr2",
            "svr3"
         ],
         "tag": "group2",
         "selector": [
            "svr1",
            "svr3"
         ]
      }
   ],
   "rules": [
      {
         "type": "field",
         "network": "tcp,udp",
         "balancerTag": "group1"  
      }
   ]
}
[/code]可以这样理解上面的设定
[list]
[*]先在outbounds建立所有服务器
[*]再在routing内建立balancers,上面例子建立2个balancers group(group1, group2),group1 包括所有3个服务器,group2只包括服务器1和3
[*]最後在routing内rules建立条件,上面例子是所有都走gruop1。group2没参与任何条件。
[/list]

kingwilliam 發表於 2019-3-7 19:55

[i=s] 本帖最後由 kingwilliam 於 2019-8-22 17:13 編輯 [/i]

16 - 附录

在第7节“强化“桥”的基础”最後部份讲到“如何用reverse proxy(反向代理)和 web server(真正的网站)保护和隠藏v2ray”。

例:v2ray 用ws+tls port 443 path /v2path/
域名 : [url]www.test123.com.cn[/url]
ip : 111.111.111.111

先解说如服务器直接上网有甚麽问题?
[list]
[*]1。先由客户出发,因服务器是用https,所以客户发出的packet是带有1个参数SNI(Server Name Indication)简单说就是域名"www.test123.com.cn"这个SNI是[b]没有[/b]加密的,所以经过任何路由或防火墙都会知您要去"www.test123.com.cn"。
[*]2。需然SNI是不加密,但 PATH 即"/v2path/"是[b]有[/b]加密的。
[/list]
问题来了
[list]
[*]问题1:如果有人试探"www.test123.com.cn"但不知path,v2ray就会回应“Bad Request”,问题是“Bad Request”不算甚麽,但完全不能访问的网站就有点奇。
Remarks1 : !!!这就是v2ray有个 "path" 参数,就是用来减低避试探的机会。!!!
Remarks2 : 所以,如v2ray用ws+tls或http2,"address"不用域名而是一个ip,这样客户端发出的packet sni就会是带1个ip,这就会露馅。

[*]问题2:如果有人试探"111.111.111.111"但不知path,v2ray也会回应“Bad Request”,问题是“Bad Request”不算甚麽,但正常网站不会这样回应。
[/list]

如 问题1+问题2 这个ip或域名就!!!大有可疑!!!。[url=http://www.telecom-cafe.com/forum/redirect.php?goto=findpost&ptid=7212&pid=46458]真实例子[/url]

这就是为甚麽,老生常谈也是这句“做戏要做全”。

所以要加入 reverse proxy(反向代理)做保护,这个反向不是v2ray那个,是一个真正的如 HAPROXY 或 SQUID。他有如大门口的保安,每次有人访问,他都会问你找谁,答不出不给他过。就是用来防止有人试探ip如“问题2”(这只是反向代理其中一个功能,也可在同1个ip同1个端口443,跟据不同SNI,转发到後台不同服务或服务器)

如答对了"www.test123.com.cn",这个人就会顺利通过反向 到达之後的网站。这时他会看见一个你想给他看的网站,这样就解决了“问题1”

那麽v2ray在那?

先解说网站的基本架构,跟目录一样,有很多子目录如下[code]
/index.html
/pic/
/doc/
/script/
/cgi-bin/
/php/
...
...
/v2path/
...
...
[/code]/v2path/就是很多子目录内其中之一,这就等同打哑谜游戏,不告知您密室机关在那,您永远不会知在厨房右上角第三格磁砖一样。否则同入到一个普通厨房一样,没甚麽特别。

这样就可以用反向代理保护网站,再用网站隠藏v2ray。

所以服务器一定要准备:
1。一个真正的域名
2。一张真正的电子证书


***最後,如v2ray也更新上 TLS 1.3 时候(我想不会太久),这时上网也就更安全。***2019年5月18日v4.18.2已支援
***但要连SNI也给加密,恐怕也要等多好几年,因ESNI(Encrypted Server Name Indication),到2019年5月24日今天还没定案***

kingwilliam 發表於 2019-3-10 11:09

[i=s] 本帖最後由 kingwilliam 於 2019-3-22 18:46 編輯 [/i]

17 - WS + TLS + WEB

先看看 白话文教学 [url=https://toutyrater.github.io/advanced/wss_and_web.html]WS+TLS+WEB[/url] 有这一节介绍。

*** 图04 ***
[attach]4314[/attach]

先了解加入web server後,服务器要如何配合。


在第7节WS+TLS开绐,“桥”就加入TLS作保护,但图就没刻意表示。现在图04就表示TLS方便理解。
web server在客户端是透明的,所以客户端不用配合,但同样要设定TLS。
web server有保护和隠藏v2ray的功用,在这个架构下还有脱去TLS外衣,张桥交给服务器的功能。所以服务器不用设定TLS。

场景:
web+v2ray在同一个伺服器
web: port 443, v2ray path:/v2path/
v2ray: ws, port:10443, path:/v2path/

先理解运作流程:
客户端发出ws+tls+/v2path/要求 -> web接收後,脱去TLS外衣,张ws+/v2path/ redirect到127.0.0.1:10443

因web server可以有很多选择, 大家可以参考 白话文教学 WS+TLS+WEB.

[size=5][color=Blue]*** 申请domain ***[/color][/size]
[attach]4315[/attach]
这张图就给大家对URL每部份都有基本认识。
FQDN = hostname + domain name + TLD

如可以,可自行到[url]www.godaddy.com[/url]申请一个domain,如:"test001.info"都只是 hk$23/年

godaddy本身已有免费dns parking服务,但就没dynamic update,如大家现在的服务器是有fixed IP就没问题,如需要dynamic update,就建议dns.he.net。他们的dns parking服务是可以dynamic update,更窝心的是每一个host都可以有各自的update password。同样是免费的。

即是老婆的 wife.test001.info 一个update password
外(面的老)婆 wife2.test001.info 又是另一个update password

自己有一个domain好处就是可以有无限多个hosts,当然如只用来过河,我会建议用最平的就可以,因每年续的价钱未必最平。

Remarks : DNS服务最基本的就是每个hosts都要给1个A record 即ipv4地址

[size=5][color=Blue]*** 申请电子证书 ***[/color][/size]
申请domain不是每个人都有需要,如已有noip或dyndns. 就可以直接申请一张真正的电子证书,还是免费的。但每3个月要续一次。
免费的可以到[url]www.sslforfree.com[/url]

[attach]4317[/attach]

他们要确认你是这个FQDN的持有人,方法有3
1。准备 这个FQDN 的 ftp 给他们下载一个档案
2。准备 这个FQDN 的 http 给他们下载一个档案
3。在 这个domain 的 DNS 加入一个TXT Record给他们确认你是这个domain持有人。

通个後,网页就会出现你的 public key 和 private key

可參考 [url=https://www.brilliantcode.net/190/how-to-applicant-ssl-certificate-and-install-ssl-certificate/]如何申請免費SSL?又要怎麼安裝SSL?(以SSL For Free – Let’s Encrypt為例)[/url]

kingwilliam 發表於 2019-3-13 20:18

[i=s] 本帖最後由 kingwilliam 於 2019-3-14 19:35 編輯 [/i]

[b][size=5][color=Red]*[/color][color=Green]=[/color][color=Blue]-[/color] [color=Purple]彩[/color][color=Orange]蛋[/color] [color=Blue]-[/color][color=Green]=[/color][color=Red]*[/color][/size][/b]

因自己真的不太会linux,所以原先不准备解说如何隠藏服务器。但最後都尽我一点点所知分享,希望对大家有用。如有错误请指正。

这个彩蛋不会出现在contet page,因真的显丑。

caddy nginx apache,三选一的话,个人会选caddy,因设定简单。

*** 因本人是用ubuntu,所以 以下都是已ubuntu做base ***
参考网页
[url]https://hostadvice.com/how-to/how-to-install-configure-the-caddy-web-server-on-an-ubuntu-18-04-vps/[/url]

* install[code]$ curl https://getcaddy.com | bash -s personal[/code]* Configure Caddy[code]
$ sudo mkdir /etc/caddy
$ sudo chown -R root:www-data /etc/caddy
$ sudo mkdir /etc/ssl/caddy
$ sudo chown -R www-data:root /etc/ssl/caddy
$ sudo chmod 0770 /etc/ssl/caddy
$ sudo touch /etc/caddy/Caddyfile
$ sudo mkdir /var/www
$ sudo chown www-data: /var/www
[/code]* Create Caddy Systemd service unit
参考网页
[url]https://computingforgeeks.com/install-caddy-web-server-on-an-ubuntu-18-04-with-lets-encrypt-ssl/[/url][code]
$ wget https://raw.githubusercontent.com/mholt/caddy/master/dist/init/linux-systemd/caddy.service
$ sudo cp caddy.service /etc/systemd/system/
$ sudo chown root:root /etc/systemd/system/caddy.service
$ sudo chmod 644 /etc/systemd/system/caddy.service
$ sudo systemctl daemon-reload
[/code]*建立网页
参考网页
[url]https://linuxhint.com/install_caddy_server_ubuntu/[/url][code]
[code]
$ sudo mkdir /var/www/mysite
[/code]/var/www/mysite/index.html[code]
<!DOCTYPE html>
<html>
<head>
<title>This page is servered by Caddy Server</title>
</head>
<body>

<h3>This page is servered by Caddy Server</h3>
<p>This is a paragraph.</p>

</body>
</html>
[/code]测试
参考网页
[url]https://linuxhint.com/install_caddy_server_ubuntu/[/url][code]
$ cd /var/www/mysite
$ caddy
[/code]如这服务器ip是192.168.55.66
就用browser [url]http://192.168.55.66:2015[/url][code]This page is servered by Caddy Server
This is a paragraph.[/code]如见到以上两行字,这就表示web server and web page都已正常运作

*建立FQDN
例:
FQDN: wife2.test01.com.cn
v2ray path : /v2path
v2ray service : ws, port:10443, path:/v2path
/etc/ssl/caddy/cert.crt <-证书
/etc/ssl/caddy/cert.key <-密钥[code]
$ nano /etc/caddy/Caddyfile
wife2.test01.com.cn
{
        proxy /v2path localhost:10443 {
                websocket
                header_upstream -Origin
        }
        tls /etc/ssl/caddy/cert.crt /etc/ssl/caddy/cert.key
        root /var/www/mysite
}
[/code]到这里,大家应该已可隠藏服务器。
index.html 大家可以参考一些 login page. 做最基本假象。但如有一些旅游网或blog就更好。

以下是一些login page sample.
[url]https://speckyboy.com/login-pages-html5-css/[/url]

希望帮到大家

index.html.zip是login page的sample, 内有2个档案,index.html, style.css 要放在同一个目录
[attach]4319[/attach]
[attach]4320[/attach]

kingwilliam 發表於 2019-3-28 18:51

[i=s] 本帖最後由 kingwilliam 於 2019-4-6 11:23 編輯 [/i]

18 - (WS/H2)+ TLS + Caddy 范例

[size=5]如 服务器 正常 ws+tls[/size][code]
"streamSettings": {
        "network": "ws",
        "wsSettings": {
                "path": "/vpath2/"
        },
        "security": "tls",
        "tlsSettings": {
                "certificates": [
                        {
                                "certificateFile": "/etc/v2ray/cert/cert.crt",
                                "keyFile": "/etc/v2ray/cert/cert.key"
                        }
                ]
        }
}[/code]*
当加入 Caddy 再配合 ws+tls 时,[b]电子证书就要由v2ray转移到Caddy[/b]
Caddyfile[code]
www.mydomain.com
{
        proxy /vpath2/ localhost:44301 {
                websocket
                header_upstream -Origin
        }
        tls /etc/ssl/caddy/cert.crt /etc/ssl/caddy/cert.key
        root /var/www/mysite
}
[/code]*
config.json[code]
"streamSettings": {
        "network": "ws",
        "wsSettings": {
                "path": "/vpath2/"
        }
}[/code]*


[size=5]如 服务器 正常 h2+tls[/size][code]
"streamSettings": {
        "network": "h2",
        "httpSettings": {
                "path": "/vpath2/"
        },
        "security": "tls",
        "tlsSettings": {
                "certificates": [
                        {
                                "certificateFile": "/etc/v2ray/cert/cert.crt",
                                "keyFile": "/etc/v2ray/cert/cert.key"
                        }
                ]
        }
}[/code]*
当加入 Caddy 再配合 h2+tls 时,[b]电子证书 要保留在v2ray,同时要拷贝到Caddy[/b]
Caddyfile[code]
www.mydomain.com
{
        proxy /vpath2/ https://localhost:44301 {
                insecure_skip_verify
                header_upstream host "www.mydomain.com"
        }
        tls /etc/ssl/caddy/cert.crt /etc/ssl/caddy/cert.key
        root /var/www/mysite
}
[/code]*
httpsetting要加入 "host" 参数
config.json[code]"httpSettings": {
        "host": "www.mydomain.com",
        "path": "/vpath2/"
}[/code]

kingwilliam 發表於 2019-3-28 21:39

[i=s] 本帖最後由 kingwilliam 於 2019-3-30 08:25 編輯 [/i]

19 - 进行 TLS 通讯时,可以关闭 VMess 的加密。

[b][size=4][color=Red]!!! 以下方式只适用於 [color=Blue]有[/color] TLS加密场景 !!!
!!! 以下方式只适用於 [color=Blue]有[/color] TLS加密场景 !!!
!!! 以下方式只适用於 [color=Blue]有[/color] TLS加密场景 !!![/color][/size][/b]

原文出於:官网 [url=https://www.v2ray.com/chapter_02/transport/quic.html]QUIC[/url]

“QUIC 强制要求开启 TLS,在传输配置中没有开启 TLS 时,V2Ray 会自行签发一个证书进行 TLS 通讯。在使用 QUIC 传输时,可以关闭 VMess 的加密。”

但 “进行 TLS 通讯时,可以关闭 VMess 的加密”。不只可用於HTTP/3(即QUIC),同时也适用於HTTP/2和HTTP/1.1(包括TCP和WS)。

可以这样理解,TLS=集装箱,VMSS+加密=夹万。

如果 你的宝贵资料先放入“夹万”,再张“夹万”放入“集装箱” 才进行运输,你的资料就保正安全(在今天还是)。
但这样就有点“架床叠屋”,因“集装箱”已可保正你的资料安全,所以就可不用“夹万”
(不用“夹万”还有一个好处,就是只需加密1次,不用加密2次,少了一次加密,对一些cpu不太高的设备应该有点帮助)

在“07 - 强化“桥”的基础”时出现过以下例子

=== 客户端 出 的例子 ===
=== code03-client-out ===[code]
"outbounds": [
   {
      "protocol": "vmess",
      "settings": {
         "vnext": [{
            "address": "server", // 服务器地址
            "port": 10086,  // 服务器端口
            "users": [
               {
                  "id": "b831381d-6324-4d53-ad4f-8cda48b30811",
                  "alterid": 4,
                  "security": "auto"
               }
            ]
         }]
      }
   }
]
[/code]*
如何“关闭 VMess 的加密”?
就是在 security 参数 转 none[code]
"outbounds": [
   {
      "protocol": "vmess",
      "settings": {
         "vnext": [{
            "address": "server", // 服务器地址
            "port": 10086,  // 服务器端口
            "users": [
               {
                  "id": "b831381d-6324-4d53-ad4f-8cda48b30811",
                  "alterid": 4,
                  "security": "none"
               }
            ]
         }]
      }
   }
]
[/code]*
只需客户端设置,服务器自行适应。

kingwilliam 發表於 2019-7-10 13:00

[i=s] 本帖最後由 kingwilliam 於 2019-8-22 17:22 編輯 [/i]

20 - WS + TLS + CDN(CloudFlare) + WEB

去到这里 WS + TLS  相信已没问题,就算加入Web Server大家也可应付。

- 加入Content Delivery Network(CDN)有甚麽好处?
[list]
[*]延迟(Latency)会有改善
[*]稳定
[*]可隐藏VPS
[*]就算VPS IP已给“墙”,也可借助CDN复活
[/list]
延迟 和 稳定  不是所有人多有改善,已我的个案为例,用了大约3天,2方面都有改善.
(可參考這個網頁: [url=https://hu60.net/q.php/bbs.topic.87327.html]大佬们有没有cloudflare的亚洲ip[/url])

- 当然有好处,也会有坏处
[list]
[*]速度可能没你现在直连那麽高
[/list]

CF须然国内也有服务,就因没ICP备案所以也不能申请,以我的例子 最近的CDN Node在美国加利福尼亚州,
但ping time比我现在还好 以下是我中午12点的测试
ping CDN ~25ms
ping HGC IP ~80ms

FTP file transfer
经CDN ~8-10Mbit/s
直连HGC ~16Mbit/s

入正题,开始
* 01. 一个真实和你可全掌控的 domain name (如:example.com)
* 02. 到[url=www.cloudflare.com]www.cloudflare.com[/url]申请account
* 03.成功建立account後就要放入domain
[attach]4413[/attach]
* 04.放入domain後就要建立你的 SERVER 资料
- TYPE 选 A 就可以,即是用ipv4
- NAME键入你的HOST Name(如:[url][u]www[/u].example.com[/url] 就建入[u]www[/u], [u]photo[/u].example.com 就入[u]photo[/u])
- IPv4 address 你的VPS IP
- TTL Automatic 就可以
- 最後“云”的图案有2个选择,灰就不用CDN, 橙就启用CDN.
[attach]4414[/attach]
* 05. 记得到你申请domain网页 修改你domain 的 Name Server.
[attach]4416[/attach]
* 06. 在Crypto设定电子证书
[attach]4417[/attach]
* ssl - Full (strict)
* Order SSL Certificate - Universal SSL 就可以
* Origin Certificates - Create Certificate
(之後会显示 crt 和 key, 这时要先copy出来save to file,因过後安全问题只能看见crt已没有key. 如真的没了, 只要删除旧电子证书再建立新的就可以。)
[attach]4418[/attach]
* Always Use HTTPS - ON
* Minimum TLS Version - TLS 1.2
* TLS 1.3 - Enabled+0RTT
* Automatic HTTPS Rewrites - Off

Others :
* HTTP Strict Transport Security (HSTS) - 自行决定
* Authenticated Origin Pulls - 如想你的VPS减少不必要的干扰,可考虑选用“Authenticated Origin Pulls” - 这个可自行决定
- 一般情况下,只有client看电子证书,确认要连接的服务器是你要的服务器,这时服务器可以说是来者不佢,如启动了这功能,服务器就可以只接受CF过来的要求。

=====
Q:为何选 Websocket 而不用HTTP/2?
短A:因CF还没完全支援HTTP/2所以只能用WS.
长A:因CF有说明 CF入站支援HTTP/2, 但CF与VPS之间只能HTTP/1.1.


如果大家要加入CDN,CloudFlare(CF)相信是今天唯一选择,何解?国内有很多CDN服务单位(如:Baidu, Alibaba , Tencent), 因他们都要求你的网站先要有 工信部网站备案(即ICP),没ICP就不能申请CDN。唯独CF可没有ICP也能用CDN,还是“免费”。(其实CF-CDN不是完全免费,有很多部份是要收费的,但免费部份已完全足够v2ray所需)。

kingwilliam 發表於 2019-7-25 12:11

[i=s] 本帖最後由 kingwilliam 於 2019-8-6 16:11 編輯 [/i]

R01 - 反向代理 或 {VPN} over dokodemo

现有问题

- 因“反向代理”成功建立连线後客户端的port口会一直用到中断。就是这一长时间连线会引起“墙”的注意,“墙”会主动断开这个连接,当v2ray发现连接断开後,会开一个新的port口再发起连接,就是这样不断循环最终引至“墙”封锁server side listening port{ 以上是我正在面对的问题 }
- 就算不是"反向代理",如客户端用例如openvpn over dokodemo. 也会出现同一情况{ 以上是我正在面对的问题 }
- 如在“墙”的位置看,有一个连接长时间连接不断,“墙”主动断开,但好快又再连接,再断再连接,结论就是“有一不知名服务在运作”
{ 以上纯是个人推测 }

所以在这建议各位,如有用 "反向代理" 或 "{VPN} over dokodemo",在还没有解决方案前,小心给“墙”发现你正在"暗度陈仓"。


=== 2019.07.23 07:44 ===[start]
在官網未有解決方法前,可用現有工具自組方案處理,須未必是最好,但總比沒有好。

解決方法思路:形勢比人弱時,最好的方法是主動出擊。與其等"牆" 中斷連線,不如自行restart service 重新取一個新端口。

但 不選擇restart v2ray 因個人覺得不是好辦法。所以不選這方案。

因不restart v2ray 就不能另返向代理重新連接,所以決定放棄官方返向代理(自組返代 下文詳述)

因我有用openvpn 所以我就用 schedule restart openvpn client 去完成 轉客戶端 tcp端口 和用openvpn做反向代理。

(已終止)
=== 2019.07.23 07:44 ===[end]

原先準備在client side restart openvpn every 3mins, 引發client取一個新port, 避免長時間用同一port口引起“墙”的關注。
但看來“墙”不只看一個port口conection time, 還會看client mac address -> server mac address 兩個mac address之間的connection time.即不管你多少時間轉多少port, 只要一段時間兩個mac address持續連接就會被“墙”   “暫停你連接你的server”   

原來自己真的太天真,“墙”真的不好應付,現在還是停用“反向代理”同“{VPN} over dokodemo”比較好。

kingwilliam 發表於 2019-8-13 20:32

[i=s] 本帖最後由 kingwilliam 於 2019-8-13 20:53 編輯 [/i]

R02 - 不要钻牛角尖 websocket + http/2

如已运用到“炉火纯青”的时候,难免会挑战难到,但也不要有钻牛角尖的意图,如websocket + http/2,何解?因已有人提问,也有完美答案。(因我也想过 哈哈哈)

节录:
。。。“websocket就是http1.1,一旦成为http2了就没有websocket了(因为http2协议包含了websocket的功能了,你可以理解为融为一体了,也可以理解为http2就是websocket的升级版)”。。。

全文:
[url=https://github.com/v2ray/v2ray-core/issues/1128][纯讨论]v2ray+websocket+tls/v2ray+http2+tls和普通的http2代理有区别吗 #1128[/url]

頁: [1]

Powered by Discuz! Archiver 7.2  © 2001-2009 Comsenz Inc.