mirror of
				https://github.com/bjdgyc/anylink.git
				synced 2025-11-04 11:06:22 +08:00 
			
		
		
		
	
							
								
								
									
										29
									
								
								question.md
									
									
									
									
									
								
							
							
						
						
									
										29
									
								
								question.md
									
									
									
									
									
								
							@@ -1,10 +1,13 @@
 | 
				
			|||||||
# 常见问题
 | 
					# 常见问题
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### anyconnect 客户端问题
 | 
					### anyconnect 客户端问题
 | 
				
			||||||
> 客户端请使用群共享文件的版本,其他版本没有测试过,不保证使用正常。
 | 
					> 客户端请使用群共享文件的版本,其他版本没有测试过,不保证使用正常
 | 
				
			||||||
> 
 | 
					> 
 | 
				
			||||||
> 添加QQ群: 567510628
 | 
					> 添加QQ群: 567510628
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### OTP 动态码
 | 
				
			||||||
 | 
					> 请使用手机安装 freeotp ,然后扫描otp二维码,生成的数字即是动态码
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### 远程桌面连接
 | 
					### 远程桌面连接
 | 
				
			||||||
> 本软件已经支持远程桌面里面连接anyconnect。
 | 
					> 本软件已经支持远程桌面里面连接anyconnect。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -13,3 +16,27 @@
 | 
				
			|||||||
> 
 | 
					> 
 | 
				
			||||||
> 其他使用私有证书的问题,请自行解决
 | 
					> 其他使用私有证书的问题,请自行解决
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### dpd timeout 设置问题
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					#客户端失效检测时间(秒) dpd > keepalive
 | 
				
			||||||
 | 
					cstp_keepalive = 20
 | 
				
			||||||
 | 
					cstp_dpd = 30
 | 
				
			||||||
 | 
					mobile_keepalive = 40
 | 
				
			||||||
 | 
					mobile_dpd = 50
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					> 以上dpd参数为客户端的超时检测时间, 如一段时间内,没有数据传输,防火墙会主动关闭连接
 | 
				
			||||||
 | 
					> 
 | 
				
			||||||
 | 
					> 如经常出现 timeout 的错误信息,应根据当前防火墙的设置,适当减小dpd数值
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### 性能问题
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					内网环境测试数据
 | 
				
			||||||
 | 
					虚拟服务器:  centos7 4C8G
 | 
				
			||||||
 | 
					anylink:    tun模式 tcp传输
 | 
				
			||||||
 | 
					客户端文件下载速度:240Mb/s
 | 
				
			||||||
 | 
					客户端网卡下载速度:270Mb/s
 | 
				
			||||||
 | 
					服务端网卡上传速度:280Mb/s
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					> 客户端tls加密协议、隧道header头都会占用一定带宽
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -58,7 +58,7 @@ func ip2long(ip net.IP) uint32 {
 | 
				
			|||||||
	return binary.BigEndian.Uint32(ip)
 | 
						return binary.BigEndian.Uint32(ip)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// 获取动态ip
 | 
					// AcquireIp 获取动态ip
 | 
				
			||||||
func AcquireIp(username, macAddr string) net.IP {
 | 
					func AcquireIp(username, macAddr string) net.IP {
 | 
				
			||||||
	IpPool.mux.Lock()
 | 
						IpPool.mux.Lock()
 | 
				
			||||||
	defer IpPool.mux.Unlock()
 | 
						defer IpPool.mux.Unlock()
 | 
				
			||||||
@@ -71,37 +71,24 @@ func AcquireIp(username, macAddr string) net.IP {
 | 
				
			|||||||
	if err == nil {
 | 
						if err == nil {
 | 
				
			||||||
		ip := mi.IpAddr
 | 
							ip := mi.IpAddr
 | 
				
			||||||
		ipStr := ip.String()
 | 
							ipStr := ip.String()
 | 
				
			||||||
 | 
							// 跳过活跃连接
 | 
				
			||||||
 | 
							_, ok := ipActive[ipStr]
 | 
				
			||||||
		// 检测原有ip是否在新的ip池内
 | 
							// 检测原有ip是否在新的ip池内
 | 
				
			||||||
		if IpPool.Ipv4IPNet.Contains(ip) {
 | 
							if IpPool.Ipv4IPNet.Contains(ip) && !ok {
 | 
				
			||||||
			mi.Username = username
 | 
								mi.Username = username
 | 
				
			||||||
			mi.LastLogin = tNow
 | 
								mi.LastLogin = tNow
 | 
				
			||||||
			// 回写db数据
 | 
								// 回写db数据
 | 
				
			||||||
			_ = dbdata.Save(mi)
 | 
								_ = dbdata.Save(mi)
 | 
				
			||||||
			ipActive[ipStr] = true
 | 
								ipActive[ipStr] = true
 | 
				
			||||||
			return ip
 | 
								return ip
 | 
				
			||||||
		} else {
 | 
					 | 
				
			||||||
			_ = dbdata.Del(mi)
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// 全局遍历未分配ip
 | 
							_ = dbdata.Del(mi)
 | 
				
			||||||
	// 优先获取没有使用的ip
 | 
					
 | 
				
			||||||
	for i := IpPool.IpLongMin; i <= IpPool.IpLongMax; i++ {
 | 
					 | 
				
			||||||
		ip := long2ip(i)
 | 
					 | 
				
			||||||
		ipStr := ip.String()
 | 
					 | 
				
			||||||
		mi := &dbdata.IpMap{}
 | 
					 | 
				
			||||||
		err := dbdata.One("IpAddr", ip, mi)
 | 
					 | 
				
			||||||
		if err != nil && dbdata.CheckErrNotFound(err) {
 | 
					 | 
				
			||||||
			// 该ip没有被使用
 | 
					 | 
				
			||||||
			mi := &dbdata.IpMap{IpAddr: ip, MacAddr: macAddr, Username: username, LastLogin: tNow}
 | 
					 | 
				
			||||||
			_ = dbdata.Save(mi)
 | 
					 | 
				
			||||||
			ipActive[ipStr] = true
 | 
					 | 
				
			||||||
			return ip
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	farIp := &dbdata.IpMap{LastLogin: tNow}
 | 
						farIp := &dbdata.IpMap{LastLogin: tNow}
 | 
				
			||||||
	// 遍历超过租期ip
 | 
						// 全局遍历超过租期ip
 | 
				
			||||||
	for i := IpPool.IpLongMin; i <= IpPool.IpLongMax; i++ {
 | 
						for i := IpPool.IpLongMin; i <= IpPool.IpLongMax; i++ {
 | 
				
			||||||
		ip := long2ip(i)
 | 
							ip := long2ip(i)
 | 
				
			||||||
		ipStr := ip.String()
 | 
							ipStr := ip.String()
 | 
				
			||||||
@@ -112,11 +99,20 @@ func AcquireIp(username, macAddr string) net.IP {
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		v := &dbdata.IpMap{}
 | 
							v := &dbdata.IpMap{}
 | 
				
			||||||
		err := dbdata.One("IpAddr", ip, v)
 | 
							err = dbdata.One("IpAddr", ip, v)
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
 | 
								if dbdata.CheckErrNotFound(err) {
 | 
				
			||||||
 | 
									// 该ip没有被使用
 | 
				
			||||||
 | 
									mi = &dbdata.IpMap{IpAddr: ip, MacAddr: macAddr, Username: username, LastLogin: tNow}
 | 
				
			||||||
 | 
									_ = dbdata.Save(mi)
 | 
				
			||||||
 | 
									ipActive[ipStr] = true
 | 
				
			||||||
 | 
									return ip
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
			base.Error(err)
 | 
								base.Error(err)
 | 
				
			||||||
			return nil
 | 
								return nil
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// 跳过ip保留
 | 
				
			||||||
		if v.Keep {
 | 
							if v.Keep {
 | 
				
			||||||
			continue
 | 
								continue
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
@@ -124,7 +120,7 @@ func AcquireIp(username, macAddr string) net.IP {
 | 
				
			|||||||
		// 已经超过租期
 | 
							// 已经超过租期
 | 
				
			||||||
		if tNow.Sub(v.LastLogin) > time.Duration(base.Cfg.IpLease)*time.Second {
 | 
							if tNow.Sub(v.LastLogin) > time.Duration(base.Cfg.IpLease)*time.Second {
 | 
				
			||||||
			_ = dbdata.Del(v)
 | 
								_ = dbdata.Del(v)
 | 
				
			||||||
			mi := &dbdata.IpMap{IpAddr: ip, MacAddr: macAddr, Username: username, LastLogin: tNow}
 | 
								mi = &dbdata.IpMap{IpAddr: ip, MacAddr: macAddr, Username: username, LastLogin: tNow}
 | 
				
			||||||
			// 重写db数据
 | 
								// 重写db数据
 | 
				
			||||||
			_ = dbdata.Save(mi)
 | 
								_ = dbdata.Save(mi)
 | 
				
			||||||
			ipActive[ipStr] = true
 | 
								ipActive[ipStr] = true
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										18
									
								
								web/package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										18
									
								
								web/package-lock.json
									
									
									
										generated
									
									
									
								
							@@ -3419,10 +3419,14 @@
 | 
				
			|||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "node_modules/caniuse-lite": {
 | 
					    "node_modules/caniuse-lite": {
 | 
				
			||||||
      "version": "1.0.30001135",
 | 
					      "version": "1.0.30001240",
 | 
				
			||||||
      "resolved": "https://registry.npm.taobao.org/caniuse-lite/download/caniuse-lite-1.0.30001135.tgz?cache=0&sync_timestamp=1600754676334&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcaniuse-lite%2Fdownload%2Fcaniuse-lite-1.0.30001135.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001240.tgz",
 | 
				
			||||||
      "integrity": "sha1-mVseuUQEo8mg12AMETybsn8s2Ko=",
 | 
					      "integrity": "sha512-nb8mDzfMdxBDN7ZKx8chWafAdBp5DAAlpWvNyUGe5tcDWd838zpzDN3Rah9cjCqhfOKkrvx40G2SDtP0qiWX/w==",
 | 
				
			||||||
      "dev": true
 | 
					      "dev": true,
 | 
				
			||||||
 | 
					      "funding": {
 | 
				
			||||||
 | 
					        "type": "opencollective",
 | 
				
			||||||
 | 
					        "url": "https://opencollective.com/browserslist"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "node_modules/case-sensitive-paths-webpack-plugin": {
 | 
					    "node_modules/case-sensitive-paths-webpack-plugin": {
 | 
				
			||||||
      "version": "2.3.0",
 | 
					      "version": "2.3.0",
 | 
				
			||||||
@@ -17187,9 +17191,9 @@
 | 
				
			|||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "caniuse-lite": {
 | 
					    "caniuse-lite": {
 | 
				
			||||||
      "version": "1.0.30001135",
 | 
					      "version": "1.0.30001240",
 | 
				
			||||||
      "resolved": "https://registry.npm.taobao.org/caniuse-lite/download/caniuse-lite-1.0.30001135.tgz?cache=0&sync_timestamp=1600754676334&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcaniuse-lite%2Fdownload%2Fcaniuse-lite-1.0.30001135.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001240.tgz",
 | 
				
			||||||
      "integrity": "sha1-mVseuUQEo8mg12AMETybsn8s2Ko=",
 | 
					      "integrity": "sha512-nb8mDzfMdxBDN7ZKx8chWafAdBp5DAAlpWvNyUGe5tcDWd838zpzDN3Rah9cjCqhfOKkrvx40G2SDtP0qiWX/w==",
 | 
				
			||||||
      "dev": true
 | 
					      "dev": true
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "case-sensitive-paths-webpack-plugin": {
 | 
					    "case-sensitive-paths-webpack-plugin": {
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user