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

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

kingwilliam CHing 加油!

TOP

回復 5# kingwilliam


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

TOP

本帖最後由 kingwilliam 於 2019-3-1 07:15 編輯

回復 17# vpn-learner


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

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

TOP

本帖最後由 kingwilliam 於 2019-8-24 07:41 編輯

15 - 负载均衡器 (balancer)

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

先在client outbounds建立所有郊外服務器資料。
  1. "outbounds": [
  2.    {
  3.       "tag": "svr1",
  4.       ...
  5.    },
  6.    {
  7.       "tag": "svr2",
  8.       ...
  9.    },
  10.    {
  11.       "tag": "svr3",
  12.       ...
  13.    }
  14. ]
複製代碼
再在routing建立balancers group和routing rules,
  1. "routing": {
  2.    "balancers": [
  3.       {
  4.          "tag": "group1",
  5.          "selector": [
  6.             "svr1",
  7.             "svr2",
  8.             "svr3"
  9.          ],
  10.          "tag": "group2",
  11.          "selector": [
  12.             "svr1",
  13.             "svr3"
  14.          ]
  15.       }
  16.    ],
  17.    "rules": [
  18.       {
  19.          "type": "field",
  20.          "network": "tcp,udp",
  21.          "balancerTag": "group1"  
  22.       }
  23.    ]
  24. }
複製代碼
可以这样理解上面的设定

  • 先在outbounds建立所有服务器
  • 再在routing内建立balancers,上面例子建立2个balancers group(group1, group2),group1 包括所有3个服务器,group2只包括服务器1和3
  • 最後在routing内rules建立条件,上面例子是所有都走gruop1。group2没参与任何条件。

TOP

本帖最後由 kingwilliam 於 2019-8-22 17:13 編輯

16 - 附录

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

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

先解说如服务器直接上网有甚麽问题?

  • 1。先由客户出发,因服务器是用https,所以客户发出的packet是带有1个参数SNI(Server Name Indication)简单说就是域名"www.test123.com.cn"这个SNI是没有加密的,所以经过任何路由或防火墙都会知您要去"www.test123.com.cn"。
  • 2。需然SNI是不加密,但 PATH 即"/v2path/"是加密的。

问题来了

  • 问题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”不算甚麽,但正常网站不会这样回应。


如 问题1+问题2 这个ip或域名就!!!大有可疑!!!。真实例子

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

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

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

那麽v2ray在那?

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

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

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


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

TOP

本帖最後由 kingwilliam 於 2019-3-22 18:46 編輯

17 - WS + TLS + WEB

先看看 白话文教学 WS+TLS+WEB 有这一节介绍。

*** 图04 ***


先了解加入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.

*** 申请domain ***

这张图就给大家对URL每部份都有基本认识。
FQDN = hostname + domain name + TLD

如可以,可自行到www.godaddy.com申请一个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地址

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



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

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

可參考 如何申請免費SSL?又要怎麼安裝SSL?(以SSL For Free – Let’s Encrypt為例)
附件: 您需要登錄才可以下載或查看附件。沒有帳號?註冊

TOP

本帖最後由 kingwilliam 於 2019-3-14 19:35 編輯

  

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

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

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

*** 因本人是用ubuntu,所以 以下都是已ubuntu做base ***
参考网页
https://hostadvice.com/how-to/ho ... n-ubuntu-18-04-vps/

* install
  1. $ curl https://getcaddy.com | bash -s personal
複製代碼
* Configure Caddy
  1. $ sudo mkdir /etc/caddy
  2. $ sudo chown -R root:www-data /etc/caddy
  3. $ sudo mkdir /etc/ssl/caddy
  4. $ sudo chown -R www-data:root /etc/ssl/caddy
  5. $ sudo chmod 0770 /etc/ssl/caddy
  6. $ sudo touch /etc/caddy/Caddyfile
  7. $ sudo mkdir /var/www
  8. $ sudo chown www-data: /var/www
複製代碼
* Create Caddy Systemd service unit
参考网页
https://computingforgeeks.com/in ... h-lets-encrypt-ssl/
  1. $ wget https://raw.githubusercontent.com/mholt/caddy/master/dist/init/linux-systemd/caddy.service
  2. $ sudo cp caddy.service /etc/systemd/system/
  3. $ sudo chown root:root /etc/systemd/system/caddy.service
  4. $ sudo chmod 644 /etc/systemd/system/caddy.service
  5. $ sudo systemctl daemon-reload
複製代碼
*建立网页
参考网页
https://linuxhint.com/install_caddy_server_ubuntu/
  1. [code]
  2. $ sudo mkdir /var/www/mysite
複製代碼
/var/www/mysite/index.html
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title>This page is servered by Caddy Server</title>
  5. </head>
  6. <body>

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

  9. </body>
  10. </html>
複製代碼
测试
参考网页
https://linuxhint.com/install_caddy_server_ubuntu/
  1. $ cd /var/www/mysite
  2. $ caddy
複製代碼
如这服务器ip是192.168.55.66
就用browser http://192.168.55.66:2015
  1. This page is servered by Caddy Server
  2. This is a paragraph.
複製代碼
如见到以上两行字,这就表示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 <-密钥
  1. $ nano /etc/caddy/Caddyfile
  2. wife2.test01.com.cn
  3. {
  4.         proxy /v2path localhost:10443 {
  5.                 websocket
  6.                 header_upstream -Origin
  7.         }
  8.         tls /etc/ssl/caddy/cert.crt /etc/ssl/caddy/cert.key
  9.         root /var/www/mysite
  10. }
複製代碼
到这里,大家应该已可隠藏服务器。
index.html 大家可以参考一些 login page. 做最基本假象。但如有一些旅游网或blog就更好。

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

希望帮到大家

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

附件: 您需要登錄才可以下載或查看附件。沒有帳號?註冊

TOP

本帖最後由 kingwilliam 於 2019-4-6 11:23 編輯

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

如 服务器 正常 ws+tls
  1. "streamSettings": {
  2.         "network": "ws",
  3.         "wsSettings": {
  4.                 "path": "/vpath2/"
  5.         },
  6.         "security": "tls",
  7.         "tlsSettings": {
  8.                 "certificates": [
  9.                         {
  10.                                 "certificateFile": "/etc/v2ray/cert/cert.crt",
  11.                                 "keyFile": "/etc/v2ray/cert/cert.key"
  12.                         }
  13.                 ]
  14.         }
  15. }
複製代碼

当加入 Caddy 再配合 ws+tls 时,电子证书就要由v2ray转移到Caddy
Caddyfile
  1. www.mydomain.com
  2. {
  3.         proxy /vpath2/ localhost:44301 {
  4.                 websocket
  5.                 header_upstream -Origin
  6.         }
  7.         tls /etc/ssl/caddy/cert.crt /etc/ssl/caddy/cert.key
  8.         root /var/www/mysite
  9. }
複製代碼

config.json
  1. "streamSettings": {
  2.         "network": "ws",
  3.         "wsSettings": {
  4.                 "path": "/vpath2/"
  5.         }
  6. }
複製代碼



如 服务器 正常 h2+tls
  1. "streamSettings": {
  2.         "network": "h2",
  3.         "httpSettings": {
  4.                 "path": "/vpath2/"
  5.         },
  6.         "security": "tls",
  7.         "tlsSettings": {
  8.                 "certificates": [
  9.                         {
  10.                                 "certificateFile": "/etc/v2ray/cert/cert.crt",
  11.                                 "keyFile": "/etc/v2ray/cert/cert.key"
  12.                         }
  13.                 ]
  14.         }
  15. }
複製代碼

当加入 Caddy 再配合 h2+tls 时,电子证书 要保留在v2ray,同时要拷贝到Caddy
Caddyfile
  1. www.mydomain.com
  2. {
  3.         proxy /vpath2/ https://localhost:44301 {
  4.                 insecure_skip_verify
  5.                 header_upstream host "www.mydomain.com"
  6.         }
  7.         tls /etc/ssl/caddy/cert.crt /etc/ssl/caddy/cert.key
  8.         root /var/www/mysite
  9. }
複製代碼

httpsetting要加入 "host" 参数
config.json
  1. "httpSettings": {
  2.         "host": "www.mydomain.com",
  3.         "path": "/vpath2/"
  4. }
複製代碼

TOP

本帖最後由 kingwilliam 於 2019-3-30 08:25 編輯

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

!!! 以下方式只适用於 TLS加密场景 !!!
!!! 以下方式只适用於 TLS加密场景 !!!
!!! 以下方式只适用於 TLS加密场景 !!!


原文出於:官网 QUIC

“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 ===
  1. "outbounds": [
  2.    {
  3.       "protocol": "vmess",
  4.       "settings": {
  5.          "vnext": [{
  6.             "address": "server", // 服务器地址
  7.             "port": 10086,  // 服务器端口
  8.             "users": [
  9.                {
  10.                   "id": "b831381d-6324-4d53-ad4f-8cda48b30811",
  11.                   "alterid": 4,
  12.                   "security": "auto"
  13.                }
  14.             ]
  15.          }]
  16.       }
  17.    }
  18. ]
複製代碼

如何“关闭 VMess 的加密”?
就是在 security 参数 转 none
  1. "outbounds": [
  2.    {
  3.       "protocol": "vmess",
  4.       "settings": {
  5.          "vnext": [{
  6.             "address": "server", // 服务器地址
  7.             "port": 10086,  // 服务器端口
  8.             "users": [
  9.                {
  10.                   "id": "b831381d-6324-4d53-ad4f-8cda48b30811",
  11.                   "alterid": 4,
  12.                   "security": "none"
  13.                }
  14.             ]
  15.          }]
  16.       }
  17.    }
  18. ]
複製代碼

只需客户端设置,服务器自行适应。

TOP

本帖最後由 kingwilliam 於 2019-8-22 17:22 編輯

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

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

- 加入Content Delivery Network(CDN)有甚麽好处?

  • 延迟(Latency)会有改善
  • 稳定
  • 可隐藏VPS
  • 就算VPS IP已给“墙”,也可借助CDN复活

延迟 和 稳定  不是所有人多有改善,已我的个案为例,用了大约3天,2方面都有改善.
(可參考這個網頁: 大佬们有没有cloudflare的亚洲ip)

- 当然有好处,也会有坏处

  • 速度可能没你现在直连那麽高


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. 到www.cloudflare.com申请account
* 03.成功建立account後就要放入domain

* 04.放入domain後就要建立你的 SERVER 资料
- TYPE 选 A 就可以,即是用ipv4
- NAME键入你的HOST Name(如:www.example.com 就建入www, photo.example.com 就入photo)
- IPv4 address 你的VPS IP
- TTL Automatic 就可以
- 最後“云”的图案有2个选择,灰就不用CDN, 橙就启用CDN.

* 05. 记得到你申请domain网页 修改你domain 的 Name Server.

* 06. 在Crypto设定电子证书

* ssl - Full (strict)
* Order SSL Certificate - Universal SSL 就可以
* Origin Certificates - Create Certificate
(之後会显示 crt 和 key, 这时要先copy出来save to file,因过後安全问题只能看见crt已没有key. 如真的没了, 只要删除旧电子证书再建立新的就可以。)

* 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所需)。
附件: 您需要登錄才可以下載或查看附件。沒有帳號?註冊

TOP

本帖最後由 kingwilliam 於 2019-8-6 16:11 編輯

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”比較好。

TOP

本帖最後由 kingwilliam 於 2019-8-13 20:53 編輯

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

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

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

全文:
[纯讨论]v2ray+websocket+tls/v2ray+http2+tls和普通的http2代理有区别吗 #1128

TOP

返回列表