Total Pageviews

Thursday 8 October 2020

自建V2Ray+TLS翻墙(此法不错)

 先注册一个域名。在linux vps上,安装acme.sh和v2ray. v2ray的可执行文件为

/usr/local/bin/v2ray,其配置文件所在的目录为/usr/local/etc/v2ray/,


v2ray服务器端的配置文件,我取名为v2ray-tls-config.json,

cat /usr/local/etc/v2ray/v2ray-tls-config.json

{
  "inbounds": [
    {
      "port": 445, // 不一定要用443端口  
      "protocol": "vmess", 
      "settings": {
        "clients": [
          {
            "id": "23ad6b10-8d1a-40f7-8ad0-e3e35cd38297",  
            "alterId": 64
          }
        ]
      },
      "streamSettings": {
        "network": "tcp",
        "security": "tls", // security 要设置为 tls 才会启用 TLS
        "tlsSettings": {
          "certificates": [
            {
              "certificateFile": "/root/.acme.sh/urdomain.com/fullchain.cer", 
              "keyFile": "/root/.acme.sh/urdomain.com/urdomain.com.key" 
            }
          ]
        }
      }
    }
  ],
  "outbounds": [
    {
      "protocol": "freedom",
      "settings": {}
    }
  ]
}

然后运行:

v2ray -config /usr/local/etc/v2ray/v2ray-tls-config.json

不过此命令是运行在前台的,容易退出,我们可以利用systemd把它运行为service:

nano /etc/systemd/system/v2ray-tls.service

cat /etc/systemd/system/v2ray-tls.service

[Unit]

After=network.target


[Service]

ExecStart=/usr/local/bin/v2ray -config /usr/local/etc/v2ray/v2ray-tls-config.json

Restart=always


[Install]

WantedBy=multi-user.target


然后运行,

systemctl start v2ray-tls

systemctl enable v2ray-tls

服务器端搭建完成。


在本地机器mac或linux桌面系统上,安装v2ray.

客户端的配置文件,我把它取名为v2ray-tls-config-socks-proxy-mode.json,内容如下:

{
  "inbounds": [
    {
      "port": 3080,
      "protocol": "socks", // socks协议可以换成http协议
      "sniffing": {
        "enabled": true,
        "destOverride": ["http", "tls"]
      },
      "settings": {
        "auth": "noauth"
      }
    }
  ],
  "outbounds": [
    {
      "protocol": "vmess",
      "settings": {
        "vnext": [
          {
            "address": "urdomain.com", // tls 需要域名,所以这里应该填自己的域名。
            "port": 445,
            "users": [
              {
                "id": "23ad6b10-8d1a-40f7-8ad0-e3e35cd38297",
                "alterId": 64
              }
            ]
          }
        ]
      },
      "streamSettings": {
        "network": "tcp",
        "security": "tls" // 客户端的 security 也要设置为 tls
      }
    }
  ]
}

然后运行:

v2ray -config v2ray-tls-config-socks-proxy-mode.json


不要关闭这个终端,然后设置浏览器的socks5代理服务器地址为127.0.0.1 ,端口:3080 ,浏览器即可翻墙。

V2Ray 的 TLS 不是伪装流量或混淆流量,这是完整、真正的 TLS加密。因此才需要域名和证书。

正因为它用了TLS加密,所以翻墙效果非常可靠,比纯kcp方式(https://briteming.blogspot.com/2015/10/v2ray.html)可靠多了。

上面的urdomain.com是购买的付费域名,那么上面这么操作后,浏览器即可翻墙。

如果urdomain.com是你注册的免费的可解析的域名,那么此域名有可能已被gfw封锁,无法解析,导致用客户端命令连接不上服务器。解决办法:

sudo networksetup -setdnsservers "Wi-Fi" 127.0.0.1


运行某个ss客户端程序。


cd ~/dns-tcp-socks-proxy;sudo ./dns_proxy

(用法详见https://briteming.blogspot.com/2019/07/dns-tcp-socks-proxysocks-proxydns.html)


然后运行上面的客户端命令。

(如果你合拢了mac机器的机盖,需先运行

sudo networksetup -setdnsservers "Wi-Fi" 127.0.0.1 


sudo killall dns_proxy;cd ~/dns-tcp-socks-proxy;sudo ./dns_proxy

然后重新运行客户端命令:

v2ray -config v2ray-tls-config-socks-proxy-mode.json


不要关闭这个终端,然后设置浏览器的socks5代理服务器地址为127.0.0.1 ,端口:3080 ,浏览器即可翻墙。

参考自:https://github.com/bannedbook/fanqiang/blob/master/v2ss/%E8%87%AA%E5%BB%BAV2Ray%2BTLS%E7%BF%BB%E5%A2%99%E9%85%8D%E7%BD%AE%E6%96%B9%E6%B3%95.md

----------------

V2Ray之TLS+WebSocket翻墙方法

WebSocket 的配置其实很简单,基于前文 V2Ray+TLS的基础上, 我们把 "network": "tcp" 改成 "network": "ws" 就行了,注意,服务器和客户端要同时修改哦。

话不多说了,直接上配置。

服务器

{
  "inbounds": [
    {
      "port": 443, // 建议使用 443 端口
      "protocol": "vmess",    
      "settings": {
        "clients": [
          {
            "id": "23ad6b10-8d1a-40f7-8ad0-e3e35cd38297",  
            "alterId": 64
          }
        ]
      },
      "streamSettings": {
        "network": "ws",
        "security": "tls", // security 要设置为 tls 才会启用 TLS
        "tlsSettings": {
          "certificates": [
            {
              "certificateFile": "/etc/v2ray/v2ray.crt", // 证书文件
              "keyFile": "/etc/v2ray/v2ray.key" // 密钥文件
            }
          ]
        }
      }
    }
  ],
  "outbounds": [
    {
      "protocol": "freedom",
      "settings": {}
    }
  ]
}

客户端

{
  "inbounds": [
    {
      "port": 1080,
      "protocol": "socks",
      "sniffing": {
        "enabled": true,
        "destOverride": ["http", "tls"]
      },
      "settings": {
        "auth": "noauth"
      }
    }
  ],
  "outbounds": [
    {
      "protocol": "vmess",
      "settings": {
        "vnext": [
          {
            "address": "mydomain.me", // tls 需要域名,所以这里应该填自己的域名。如果前面配置了子域名,可以使用其中一个子域名,子域名被封可换另一个子域名
            "port": 443,
            "users": [
              {
                "id": "23ad6b10-8d1a-40f7-8ad0-e3e35cd38297",
                "alterId": 64
              }
            ]
          }
        ]
      },
      "streamSettings": {
        "network": "ws",
        "security": "tls" // 客户端的 security 也要设置为 tls
      }
    }
  ]
}

结语

改完服务器、客户端配置后,重启服务器,然后重启客户端,开始冲浪,是不是感觉更快了一些呢?

from https://github.com/bannedbook/fanqiang/blob/master/v2ss/V2Ray%E4%B9%8BTLS%2BWebSocket%E7%BF%BB%E5%A2%99%E6%96%B9%E6%B3%95.md

----------------------------------------------------------------------

折腾v2ray的http2方式代理

安装逗逼caddy一键脚本
wget -N --no-check-certificate https://raw.githubusercontent.com/ToyoDAdoubi/doubi/master/caddy_install.sh && chmod +x caddy_install.sh && bash caddy_install.sh install
  安装结束后,我们用winscp软件登陆vps进行相关修改。进入/usr/local/caddy/ 下新建Caddyfile文件(注意大小写 )并写入配置文件。下面我用cloud.cctv.com域名、demo@cctv.com邮箱、/data路径为例,进行相关配置。请换成自己的。
https://cloud.cctv.com {
  root /var/www/
  tls demo@cctv.com
  proxy /data https://localhost:10000 {
    insecure_skip_verify
    header_upstream X-Forwarded-Proto "https"
    header_upstream Host "cloud.cctv.com"
  }
  header / {
    Strict-Transport-Security "max-age=31536000;"
    X-XSS-Protection "1; mode=block"
    X-Content-Type-Options "nosniff"
    X-Frame-Options "DENY"
  }
}
    保存后,启动Caddy。
/etc/init.d/caddy start
    启动后可以重启vps直接输入reboot命令。重启后看/temp/caddy.log启动是否正常,如果不正常,看相关提示操作。在winscp里面按ctrl+alt+H键,看是否有隐藏文件夹.caddy。

安装v2ray:
bash <(curl -L -s https://install.direct/go.sh)
    winscp打开/etc/v2ray/config.json进行修改
{
  "log" : {
    "access": "/var/log/v2ray/access.log",
    "error": "/var/log/v2ray/error.log",
    "loglevel": "warning"
  },

  "inbound": {
    "port": 10000,
    "listen": "127.0.0.1",
    "protocol": "vmess",
    "settings": {
      "clients": [
        {
          "id": "8f9c704b-2cdc-4aae-b7f7-bd639f522016",
          "level": 1,
          "alterId": 64
        }
      ]
    },

    "streamSettings": {
      "network": "h2",
      "security": "tls",
      "httpSettings": {
        "path": "/data",
        "host": ["cloud.cctv.com"]
      },
      "tlsSettings": {
        "serverName": "cloud.cctv.com",
        "certificates": [
        {
          "certificateFile": "/etc/v2ray/v2ray.crt",
          "keyFile": "/etc/v2ray/v2ray.key"
        }
        ]
      }
    }
  },

  "outbound": {
    "protocol": "freedom",
    "settings": {}
  },
  "outboundDetour": [
    {
      "protocol": "blackhole",
      "settings": {},
      "tag": "blocked"
    }
  ],

  "routing": {
    "strategy": "rules",
    "settings": {
      "rules": [
        {
          "type": "field",
          "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"
        }
      ]
    }
  }
}
     其中cloud.cctv.com改为自己的,路径/data和Caddy中一致,"certificateFile": "/etc/v2ray/v2ray.crt","keyFile": "/etc/v2ray/v2ray.key"的路径要和/.caddy/acme/acme-v01.api.letsencrypt.org/sites/cloud.cctv.com/进行软链,不进行软链要输入完整Caddy生成的证书文件所在的位置.

ln -s /.caddy/acme/acme-v02.api.letsencrypt.org/sites/cloud.cctv.com/cloud.cctv.com.crt /etc/v2ray/v2ray.crt
ln -s /.caddy/acme/acme-v02.api.letsencrypt.org/sites/cloud.cctv.com/cloud.cctv.com.key /etc/v2ray/v2ray.key
    操作完成后,启动v2ray:
service v2ray start
service v2ray status
    运行命令:ps aux|grep v2ray 查看v2ray是否正常启动。
    如一切正常,你就可以用http/2协议进行翻墙了。

注:关于伪装技术的选择,V2ray+websocket+tls+nginx和 V2ray+http2+tls+caddy常用来做对比。理论上http2省去了upgrade的请求,性能更好。但实际使用中两者没有明显区别,加之某些web服务器(例如Nginx)不支持后端服务器为http2,所以websocket的方式更流行。如果你要上http2,记得web服务器不能用Nginx,要用支持反代http2的Caddy等webserver软件。
---------------------

V2Ray HTTP/2配置


简单地说 HTTP/2 是 HTTP/1.1 的升级版(目前大多数网页还是 HTTP/1.1),点击这里可以直观地体会到 HTTP/2 相比于 HTTP/1.1 的提升(不代表 V2Ray 中 HTTP/2 相对于 TCP 的提升就是这样的)。

V2Ray 的 HTTP/2 还处于测试阶段?

配置

最近几版的 V2Ray 已经开始支持 HTTP/2,可能 v3.12 就支持了,实测 v3.14 能够使用 HTTP/2 了。与其它的传输层协议一样在 streamSettings 中配置。

与其它的传输层协议一样在 streamSettings 中配置,不过要注意的是使用 HTTP/2 要开启 TLS。

服务器配置

{
  "inbounds": [
    {
      "port": 443,
      "protocol": "vmess",
      "settings": {
        "clients": [
          {
            "id": "b831381d-6324-4d53-ad4f-8cda48b30811",
            "alterId": 64
          }
        ]
      },
      "streamSettings": {
        "network": "h2", // h2 也可写成 http,效果一样
        "httpSettings": { //此项是关于 HTTP/2 的设置
          "path": "/ray"
        },
        "security": "tls", // 配置tls
        "tlsSettings": {
          "certificates": [
            {
              "certificateFile": "/etc/v2ray/v2ray.crt", // 证书文件,详见 tls 小节
              "keyFile": "/etc/v2ray/v2ray.key" // 密钥文件
            }
          ]
        }
      }
    }
  ],
  "outbounds": [
    {
      "protocol": "freedom",
      "settings": {}
    }
  ]
}

 

客户端配置

{
  "inbound": [
    {
      "port": 1080,
      "listen": "127.0.0.1",
      "protocol": "socks",
      "domainOverride": ["tls","http"],
      "settings": {
        "auth": "noauth",
        "udp": false
      }
    }
  ],
  "outbound": [
    {
      "protocol": "vmess",
      "settings": {
        "vnext": [
          {
            "address": "mydomain.me",
            "port": 443,
            "users": [
              {
                "id": "b831381d-6324-4d53-ad4f-8cda48b30811",
                "alterId": 64
              }
            ]
          }
        ]
      },
      "streamSettings": {
        "network": "h2",
        "httpSettings": { //此项是关于 HTTP/2 的设置
          "path": "/ray"
        },
        "security": "tls"
      }
    }
  ]
}

 

服务器反代配置,没找到相关资料……

用nginx的话,需要在编译的时候开启 –with-http_v2_module,配置加入proxy_http_version 2

但问题是:

http2可以让客户端复用连接提高性能,但是不适合用于服务器端proxy,大量的请求复用连接反而会使性能下降。

—— 以前在某篇技术文章看到的,大概是这个意思。→nginx官方issue

所以V2Ray 引入 HTTP/2 的意义到底是什么呢……

用Caddy倒是能直接反代http2,但没我用过,不予置评:

mydomain.me
{
  log ./caddy.log
    proxy /v2ray https://127.0.0.1:5050 {
        header_upstream Host {host}
        header_upstream X-Forwarded-Proto {scheme}
        insecure_skip_verify
    }
}

相关帖子:https://briteming.blogspot.com/2019/01/v2ray-websocket-web-nginx.html

No comments:

Post a Comment