mirror of https://github.com/bjdgyc/anylink.git
commit
5289aa92eb
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
|
||||||
|
|
|
@ -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": {
|
||||||
|
|
Loading…
Reference in New Issue