WireGuard Over Xray(VLESS)

Mr.Bai 2,088 浏览 2

WireGuard 和 Xray 都是现代的VPN技术,可用于加密和保护网络通信。WireGuard是一种轻量级的VPN协议,提供更快的性能和更好的安全性。Xray是一个高级网络代理工具,支持多种协议,包括VMess、Shadowsocks、Socks等。

WireGuard和Xray的关键区别:

  • 性能:WireGuard比Xray更快,因为它使用UDP协议而不是TCP协议。这意味着WireGuard可以更快地传输数据包,并且可以在高延迟和低带宽条件下提供更好的性能。
  • 安全性: WireGuard通过加密所有通信数据来确保安全性,并使用最新的加密算法(ChaCha20和Poly1305)来保护数据。 Xray同样提供强大的加密,但它没有像WG那样专注于安全性。
  • 可靠性: WireGuard是一个相对较新的协议,仍处于发展阶段,尚未广泛采用。 Xray则更成熟并已被广泛使用。
  • 支持: WireGuard目前需要安装额外的内核模块才能实现,这可能会限制其在某些系统上的使用。 Xray支持多种协议,包括VLESS、VMess、Shadowsocks、Socks等。

总之,WireGuard和Xray都是很好的VPN技术,并且可以根据应用场景选择适合您的技术。如此将二者结合岂不美哉。

需求

两台国内外机器互联,为解决WireGuard在高峰期udp干扰、阻断、延迟高的问题。

实现

准备两台的机器(以外贸公司或者跨国企业为例,一台国内一台国外)

  1. 机器 A,公网 IP: 100.100.100.100,分配内网 IP: 10.10.0.1
  2. 机器 B,公网 IP: 200.200.200.200,分配内网 IP: 10.10.1.1

VLESS配置

首先在机器 B 上建立 VLESS 入站,在 200.200.200.200 9527 端口 上接收 VLESS TCP 流量。

{
    "log": {
        "loglevel": "error"
    },
    "dns": {
        "servers": [
            "1.1.1.1",
            "8.8.8.8",
            "8.8.4.4"
        ]
    },
    "inbounds": [//入站
        {
            "listen": "0.0.0.0",
            "port": 9527,
            "protocol": "vless",
            "settings": {
                "clients": [
                    {
                        "id": "d4a23188-85b0-4b46-b84b-f1d36d66c03e"
                    }
                ],
                "decryption": "none"
            },
            "streamSettings": {
                "network": "tcp" //tcp协议
            }
        }
    ],
    "outbounds": [//出站
        {
            "protocol": "freedom",
            "settings": {
                "domainStrategy": "UseIP"
            },
            "tag": "free"
        }
    ],
    "routing": {//路由
        "rules": []
    }
}

然后在机器 A 上建立 VLESS 出站,入站使用 dokodemo-door 协议,添加一个 UDP 转发,监听 A 上的 10000 端口的 UDP 流量,将该流量通过 VLESS 出站,转发到的 127.0.0.1:10000 上。

{
    "log": {
        "loglevel": "error"
    },
    "inbounds": [//入站
        {
            "listen": "127.0.0.1",
            "port": 10000,
            "protocol": "dokodemo-door",
            "settings": {
                "address": "127.0.0.1",
                "port": 10000,
                "network": "udp"
            },
            "tag": "wg"
        }
    ],
    "outbounds": [//出站
        {
            "protocol": "vless",
            "settings": {
                "vnext": [
                    {
                        "address": "200.200.200.200",
                        "port": 9527,
                        "users": [
                            {
                                "id": "d4a23188-85b0-4b46-b84b-f1d36d66c03e",
                                "encryption": "none"
                            }
                        ]
                    }
                ]
            },
            "streamSettings": {
                "network": "tcp"
            },
            "tag": "vless-tunnel"
        }
    ],
    "routing": {
        "rules": [
            {
                "type": "field",
                "inboundTag": [
                    "wg"
                ],
                "outboundTag": "vless-tunnel"
            }
        ]
    }
}

至此,就可以将流向机器 A 127.0.0.1:10000 的 UDP 流量,经由 VLESS 隧道,转发到机器 B 的 127.0.0.1:10000 上。

WireGuard配置

在机器 A 上,添加一个 Interface,设置 Endpoint 为 127.0.0.1:10000,流入 VLESS 的入站。

[Interface]
Address = 10.10.0.1/28
DNS = 8.8.8.8
PrivateKey = # 私钥
ListenPort = 9527
MTU = 1420

[Peer]
PublicKey = # 机器 B 的公钥
AllowedIPs = 10.10.1.1/28
Endpoint = 127.0.0.1:10000
PersistentKeepalive = 27

在机器 B 上,也添加 Interface,监听在 10000 端口,接收 VLESS 转发过来的流量。

[Interface]
Address = 10.10.1.1/28
ListenPort = 10000
PrivateKey = # 私钥
MTU = 1420

[Peer]
PublicKey = # 机器 A 的公钥
AllowedIPs = 10.10.0.1/28

如此便配置完成了,之后测试是否可以连通即可。
如需修改出站入站 streamSettings 配置可参考以下链接:

发表评论 取消回复
表情 图片 链接 代码

  1. Jason
    Jason Lv 1

    请问,这些代码要怎么使用呢?非常感谢!我希望A的流量,都能转发到B,B通过其外网IP转发出去。具体应该怎么做呢?

    • Mr.Bai
      Mr.Bai 站长

      @Jason在A上设置AllowedIPs为0.0.0.0/0,表示所有流量都转发

分享
请选择语言