目录

基于路由器代理实现异地组网

背景

两个地方,一台公网服务器,实现一端能够无缝访问第一端的内网。

方案一:异地组网,zerotier或者通过校内多个公网ip,然后设置路由。

方案二:代理转发:通过公网服务器,将一台机器内网插入v2ray代理服务器。然后映射到公网。其他地方可以通过路由器上设置代理,然后实现无缝访问另一个内网。体验感上区别不大。

由于第一个异地组网的zerotier配置容易失效(不好弄到多个公网ip)。openwrt上兼容性不好等特点。决定使用基于openclash的代理转发方式。

方法

客户端的clash配置

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

mixed-port: 7890
# RESTful API for clash
external-controller: 127.0.0.1:9090
Allow-lan: true
mode: rule
log-level: warning

proxies:
  - {cipher: aes-128-gcm, name: csuoss_server_room, alterId: 0, port: 52333, server: xxx, type: vmess, uuid: 8FF6627C-C247-44EB-A9AA-A7EAB8385D4A}
proxy-groups:
  - name: server_room
    type: select
    proxies:
      - csuoss_server_room
    tolerance: 100
    url: https://oa.csuoss.cn/api/generate_204

rules:
	
	# 通过域名访问目标网络
  - DOMAIN-SUFFIX,csubot.cn,server_room
  - DOMAIN-SUFFIX,csuoss.cn,server_room
  # 通过ip访问目标网络
  - IP-CIDR,10.10.100.0/24,server_room,no-resolve
  - IP-CIDR,10.10.101.0/24,server_room,no-resolve
  
	- MATCH,DIRECT

待访问端的v2ray配置(让所有的ip和domain都可以走)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
{
  "log": {
    "loglevel": "info"
  },
  "inbounds": [
    {
      "listen": "0.0.0.0",
      "port": 52333,
      "protocol": "vmess",
      "settings": {
        "clients": [
          {
            "id": "8FF6627C-C247-44EB-A9AA-A7EAB8385D4A",
            "alterId": 0,
            "security": "auto"
          }
        ]
      }
    }
  ],
  "outbounds": [
    {
      "protocol": "blackhole",
      "settings": {
        "response": {
          "type": "none"
        }
      },
      "tag": "block"
    },
    {
      "protocol": "freedom",
      "settings": {},
      "tag": "proxy"
    }
  ],
  "routing": {
    "domainStrategy": "AsIs",
    "domainMatcher": "mph",
    "rules": [
      {
        "domainMatcher": "mph",
        "type": "field",
        "outboundTag": "proxy",
        "domain": [
          "com",
          "cn",
          "xyz",
          "work",
          "" // 匹配所有域名
        ]
      },
      {
        "domainMatcher": "mph",
        "type": "field",
        "outboundTag": "proxy",
        "ip": ["0.0.0.0/0"] // 匹配所有ip
      }
    ]
  }
}