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 客户端问题 | ### 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