mirror of
				https://github.com/bjdgyc/anylink.git
				synced 2025-10-31 16:43:28 +08:00 
			
		
		
		
	
							
								
								
									
										29
									
								
								question.md
									
									
									
									
									
								
							
							
						
						
									
										29
									
								
								question.md
									
									
									
									
									
								
							| @@ -1,10 +1,13 @@ | ||||
| # 常见问题 | ||||
|  | ||||
| ### anyconnect 客户端问题 | ||||
| > 客户端请使用群共享文件的版本,其他版本没有测试过,不保证使用正常。 | ||||
| > 客户端请使用群共享文件的版本,其他版本没有测试过,不保证使用正常 | ||||
| >  | ||||
| > 添加QQ群: 567510628 | ||||
|  | ||||
| ### OTP 动态码 | ||||
| > 请使用手机安装 freeotp ,然后扫描otp二维码,生成的数字即是动态码 | ||||
|  | ||||
| ### 远程桌面连接 | ||||
| > 本软件已经支持远程桌面里面连接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) | ||||
| } | ||||
|  | ||||
| // 获取动态ip | ||||
| // AcquireIp 获取动态ip | ||||
| func AcquireIp(username, macAddr string) net.IP { | ||||
| 	IpPool.mux.Lock() | ||||
| 	defer IpPool.mux.Unlock() | ||||
| @@ -71,37 +71,24 @@ func AcquireIp(username, macAddr string) net.IP { | ||||
| 	if err == nil { | ||||
| 		ip := mi.IpAddr | ||||
| 		ipStr := ip.String() | ||||
| 		// 跳过活跃连接 | ||||
| 		_, ok := ipActive[ipStr] | ||||
| 		// 检测原有ip是否在新的ip池内 | ||||
| 		if IpPool.Ipv4IPNet.Contains(ip) { | ||||
| 		if IpPool.Ipv4IPNet.Contains(ip) && !ok { | ||||
| 			mi.Username = username | ||||
| 			mi.LastLogin = tNow | ||||
| 			// 回写db数据 | ||||
| 			_ = dbdata.Save(mi) | ||||
| 			ipActive[ipStr] = true | ||||
| 			return ip | ||||
| 		} else { | ||||
| 			_ = dbdata.Del(mi) | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	// 全局遍历未分配ip | ||||
| 	// 优先获取没有使用的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 | ||||
| 		} | ||||
| 		_ = dbdata.Del(mi) | ||||
|  | ||||
| 	} | ||||
|  | ||||
| 	farIp := &dbdata.IpMap{LastLogin: tNow} | ||||
| 	// 遍历超过租期ip | ||||
| 	// 全局遍历超过租期ip | ||||
| 	for i := IpPool.IpLongMin; i <= IpPool.IpLongMax; i++ { | ||||
| 		ip := long2ip(i) | ||||
| 		ipStr := ip.String() | ||||
| @@ -112,11 +99,20 @@ func AcquireIp(username, macAddr string) net.IP { | ||||
| 		} | ||||
|  | ||||
| 		v := &dbdata.IpMap{} | ||||
| 		err := dbdata.One("IpAddr", ip, v) | ||||
| 		err = dbdata.One("IpAddr", ip, v) | ||||
| 		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) | ||||
| 			return nil | ||||
| 		} | ||||
|  | ||||
| 		// 跳过ip保留 | ||||
| 		if v.Keep { | ||||
| 			continue | ||||
| 		} | ||||
| @@ -124,7 +120,7 @@ func AcquireIp(username, macAddr string) net.IP { | ||||
| 		// 已经超过租期 | ||||
| 		if tNow.Sub(v.LastLogin) > time.Duration(base.Cfg.IpLease)*time.Second { | ||||
| 			_ = 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数据 | ||||
| 			_ = dbdata.Save(mi) | ||||
| 			ipActive[ipStr] = true | ||||
|   | ||||
							
								
								
									
										18
									
								
								web/package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										18
									
								
								web/package-lock.json
									
									
									
										generated
									
									
									
								
							| @@ -3419,10 +3419,14 @@ | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/caniuse-lite": { | ||||
|       "version": "1.0.30001135", | ||||
|       "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", | ||||
|       "integrity": "sha1-mVseuUQEo8mg12AMETybsn8s2Ko=", | ||||
|       "dev": true | ||||
|       "version": "1.0.30001240", | ||||
|       "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001240.tgz", | ||||
|       "integrity": "sha512-nb8mDzfMdxBDN7ZKx8chWafAdBp5DAAlpWvNyUGe5tcDWd838zpzDN3Rah9cjCqhfOKkrvx40G2SDtP0qiWX/w==", | ||||
|       "dev": true, | ||||
|       "funding": { | ||||
|         "type": "opencollective", | ||||
|         "url": "https://opencollective.com/browserslist" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/case-sensitive-paths-webpack-plugin": { | ||||
|       "version": "2.3.0", | ||||
| @@ -17187,9 +17191,9 @@ | ||||
|       } | ||||
|     }, | ||||
|     "caniuse-lite": { | ||||
|       "version": "1.0.30001135", | ||||
|       "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", | ||||
|       "integrity": "sha1-mVseuUQEo8mg12AMETybsn8s2Ko=", | ||||
|       "version": "1.0.30001240", | ||||
|       "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001240.tgz", | ||||
|       "integrity": "sha512-nb8mDzfMdxBDN7ZKx8chWafAdBp5DAAlpWvNyUGe5tcDWd838zpzDN3Rah9cjCqhfOKkrvx40G2SDtP0qiWX/w==", | ||||
|       "dev": true | ||||
|     }, | ||||
|     "case-sensitive-paths-webpack-plugin": { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user