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干扰、阻断、延迟高的问题。
实现
准备两台的机器(以外贸公司或者跨国企业为例,一台国内一台国外)
- 机器 A,公网 IP:
100.100.100.100
,分配内网 IP:10.10.0.1
- 机器 B,公网 IP:
200.200.200.200
,分配内网 IP:10.10.1.1
VLESS配置
首先在机器 B 上建立 VLESS 入站,在 200.200.200.200
的 9527
端口 上接收 VLESS TCP 流量。
Source Code
- {
- "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 上。
Source Code
- {
- "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 的入站。
Source Code
- [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 转发过来的流量。
Source Code
- [Interface]
- Address = 10.10.1.1/28
- ListenPort = 10000
- PrivateKey = # 私钥
- MTU = 1420
- [Peer]
- PublicKey = # 机器 A 的公钥
- AllowedIPs = 10.10.0.1/28
如此便配置完成了,之后测试是否可以连通即可。
如需修改出站入站 streamSettings
配置可参考以下链接:
本文作者为Mr.Bai,转载请注明。
请问,这些代码要怎么使用呢?非常感谢!我希望A的流量,都能转发到B,B通过其外网IP转发出去。具体应该怎么做呢?
@Jason在A上设置AllowedIPs为0.0.0.0/0,表示所有流量都转发