修改 atomic 引用

This commit is contained in:
bjdgyc 2024-03-14 16:47:25 +08:00
parent 57a67ee030
commit 000b041578
10 changed files with 59 additions and 37 deletions

View File

@ -47,8 +47,10 @@ AnyLink 服务端仅在 CentOS 7、CentOS 8、Ubuntu 18.04、Ubuntu 20.04 测试
> 没有编程基础的同学建议直接下载 release 包,从下面的地址下载 anylink-deploy.tar.gz
>
> https://github.com/bjdgyc/anylink/releases
>
> https://gitee.com/bjdgyc/anylink/releases
>
> 如果不会安装,可以提供有偿远程协助服务(100 CNY)。添加QQ(68492170)联系我
> 如果不会安装,可以提供有偿远程协助服务(200 CNY)。添加QQ(68492170)联系我
>
> 也可以添加QQ群 咨询群内大佬,群共享文件有相关软件下载
>
@ -58,11 +60,15 @@ AnyLink 服务端仅在 CentOS 7、CentOS 8、Ubuntu 18.04、Ubuntu 20.04 测试
### 使用问题
> 对于测试环境,可以使用 vpn.test.vqilu.cn (已经备案) 绑定host进行测试
> 对于测试环境,可以使用 vpn.test.vqilu.cn 绑定host进行测试
>
> 对于线上环境必须申请安全的https证书(跟nginx使用的证书类型一致),不支持私有证书连接
>
> 服务端安装 yum install iproute 或者 apt-get install iproute2
> 服务端依赖安装:
>
> centos: yum install iptables iproute
>
> ubuntu: apt-get install iptables iproute2
>
> 客户端请使用群共享文件的版本,其他版本没有测试过,不保证使用正常
>
@ -234,6 +240,11 @@ https://cloud.tencent.com/document/product/216/62007
1. 设置配置文件
> macvtap 设置相对比较简单,只需要配置相应的参数即可。
>
> 网络要求:需要网络支持 ARP 传输,可通过 ARP 宣告普通内网 IP。
>
> 网络限制云环境下不能使用网卡mac加白环境不能使用802.1x认证网络不能使用
>
> 以下参数可以通过执行 `ip a` 查看
```

View File

@ -58,10 +58,9 @@ func CheckModOrLoad(mod string) {
// 文件存在
return
}
err = fmt.Errorf("[error] Linux tunFile is null %s", tunPath)
log.Println(err)
return
// panic(err)
// err = fmt.Errorf("[error] Linux tunFile is null %s", tunPath)
// log.Println(err)
// return
}
if InContainer {
@ -76,7 +75,7 @@ func CheckModOrLoad(mod string) {
cmd := exec.Command("sh", "-c", cmdstr)
b, err := cmd.CombinedOutput()
if err != nil {
log.Println(string(b))
log.Println(mod, string(b))
panic(err)
}
}

View File

@ -33,7 +33,6 @@ require (
github.com/xhit/go-simple-mail/v2 v2.16.0
github.com/xlzd/gotp v0.1.0
github.com/xuri/excelize/v2 v2.8.1
go.uber.org/atomic v1.11.0
golang.org/x/crypto v0.21.0
golang.org/x/net v0.22.0
golang.org/x/text v0.14.0
@ -66,6 +65,7 @@ require (
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod v1.0.873 // indirect
github.com/toorop/go-dkim v0.0.0-20240103092955-90b7d1423f92 // indirect
github.com/yusufpapurcu/wmi v1.2.4 // indirect
go.uber.org/atomic v1.11.0 // indirect
go.uber.org/multierr v1.11.0 // indirect
golang.org/x/exp v0.0.0-20240222234643-814bf88cf225 // indirect
golang.org/x/mod v0.16.0 // indirect

View File

@ -2,8 +2,9 @@ package handler
import (
"encoding/xml"
"log"
"os/exec"
"github.com/bjdgyc/anylink/base"
)
const BufferSize = 2048
@ -46,7 +47,7 @@ func execCmd(cmdStrs []string) error {
cmd := exec.Command("sh", "-c", cmdStr)
b, err := cmd.CombinedOutput()
if err != nil {
log.Println(string(b))
base.Error(cmdStr, string(b))
return err
}
}

View File

@ -25,9 +25,9 @@ func LinkCstp(conn net.Conn, bufRW *bufio.ReadWriter, cSess *sessdata.ConnSessio
n int
dataLen uint16
dead = time.Second * time.Duration(cSess.CstpDpd+5)
idle = time.Second * time.Duration(base.Cfg.IdleTimeout)
idle = int64(base.Cfg.IdleTimeout)
checkIdle = base.Cfg.IdleTimeout > 0
lastTime time.Time
lastTime int64
)
go cstpWrite(conn, bufRW, cSess)
@ -61,7 +61,7 @@ func LinkCstp(conn net.Conn, bufRW *bufio.ReadWriter, cSess *sessdata.ConnSessio
// 判断超时时间
if checkIdle {
lastTime = cSess.LastDataTime.Load()
if lastTime.Before(utils.NowSec().Add(-idle)) {
if lastTime < (utils.NowSec().Unix() - idle) {
base.Warn("IdleTimeout", cSess.Username, cSess.IpAddr, conn.RemoteAddr(), "lastTime", lastTime)
sessdata.CloseSess(cSess.Sess.Token, dbdata.UserIdleTimeout)
return
@ -113,7 +113,7 @@ func LinkCstp(conn net.Conn, bufRW *bufio.ReadWriter, cSess *sessdata.ConnSessio
return
}
// 只记录返回正确的数据时间
cSess.LastDataTime.Store(utils.NowSec())
cSess.LastDataTime.Store(utils.NowSec().Unix())
}
}
}

View File

@ -96,7 +96,7 @@ func LinkDtls(conn net.Conn, cSess *sessdata.ConnSession) {
return
}
// 只记录返回正确的数据时间
cSess.LastDataTime.Store(utils.NowSec())
cSess.LastDataTime.Store(utils.NowSec().Unix())
}
}

View File

@ -4,12 +4,16 @@ import (
"fmt"
"github.com/bjdgyc/anylink/base"
"github.com/bjdgyc/anylink/pkg/utils"
"github.com/bjdgyc/anylink/sessdata"
"github.com/coreos/go-iptables/iptables"
"github.com/songgao/water"
)
func checkTun() {
// 测试ip命令
base.CheckModOrLoad("tun")
// 测试tun
cfg := water.Config{
DeviceType: water.TUN,
@ -21,16 +25,14 @@ func checkTun() {
}
defer ifce.Close()
// 测试ip命令
base.CheckModOrLoad("tun")
cmdstr1 := fmt.Sprintf("ip link set dev %s up mtu %s multicast off", ifce.Name(), "1399")
err = execCmd([]string{cmdstr1})
if err != nil {
base.Fatal("testTun err: ", err)
}
// 开启服务器转发
if err := execCmd([]string{"sysctl -w net.ipv4.ip_forward=1"}); err != nil {
err = execCmd([]string{"sysctl -w net.ipv4.ip_forward=1"})
if err != nil {
base.Fatal(err)
}
if base.Cfg.IptablesNat {
@ -47,14 +49,14 @@ func checkTun() {
// 添加注释
natRule := []string{"-s", base.Cfg.Ipv4CIDR, "-o", base.Cfg.Ipv4Master, "-m", "comment",
"--comment", "anylink tun nat", "-j", "MASQUERADE"}
"--comment", "AnyLink", "-j", "MASQUERADE"}
err = ipt.InsertUnique("nat", "POSTROUTING", 1, natRule...)
if err != nil {
base.Error(err)
}
// 添加注释
forwardRule := []string{"-m", "comment", "--comment", "anylink forward filter", "-j", "ACCEPT"}
forwardRule := []string{"-m", "comment", "--comment", "AnyLink", "-j", "ACCEPT"}
err = ipt.InsertUnique("filter", "FORWARD", 1, forwardRule...)
if err != nil {
base.Error(err)
@ -80,8 +82,8 @@ func LinkTun(cSess *sessdata.ConnSession) error {
cSess.SetIfName(ifce.Name())
// 通过 ip link show 查看 alias 信息
cmdstr1 := fmt.Sprintf("ip link set dev %s up mtu %d multicast off alias %s.%s", ifce.Name(), cSess.Mtu, cSess.Group.Name, cSess.Username)
alias := utils.ParseName(cSess.Group.Name + "." + cSess.Username)
cmdstr1 := fmt.Sprintf("ip link set dev %s up mtu %d multicast off alias %s", ifce.Name(), cSess.Mtu, alias)
cmdstr2 := fmt.Sprintf("ip addr add dev %s local %s peer %s/32",
ifce.Name(), base.Cfg.Ipv4Gateway, cSess.IpAddr)
err = execCmd([]string{cmdstr1, cmdstr2})

View File

@ -28,12 +28,13 @@ func (v *Vtap) Close() error {
}
func checkMacvtap() {
// 加载 macvtap
base.CheckModOrLoad("macvtap")
_setGateway()
_checkTapIp(base.Cfg.Ipv4Master)
ifName := "anylinkMacvtap"
// 加载 macvtap
base.CheckModOrLoad("macvtap")
// 开启主网卡混杂模式
cmdstr1 := fmt.Sprintf("ip link set dev %s promisc on", base.Cfg.Ipv4Master)
@ -55,8 +56,8 @@ func LinkMacvtap(cSess *sessdata.ConnSession) error {
cSess.SetIfName(ifName)
cmdstr1 := fmt.Sprintf("ip link add link %s name %s type macvtap mode bridge", base.Cfg.Ipv4Master, ifName)
cmdstr2 := fmt.Sprintf("ip link set dev %s up mtu %d address %s alias %s.%s", ifName, cSess.Mtu,
cSess.MacHw, cSess.Group.Name, cSess.Username)
alias := utils.ParseName(cSess.Group.Name + "." + cSess.Username)
cmdstr2 := fmt.Sprintf("ip link set dev %s up mtu %d address %s alias %s", ifName, cSess.Mtu, cSess.MacHw, alias)
err := execCmd([]string{cmdstr1, cmdstr2})
if err != nil {

View File

@ -3,6 +3,7 @@ package utils
import (
"fmt"
"math/rand"
"strings"
"sync/atomic"
"time"
)
@ -91,3 +92,11 @@ func RandomRunes(length int) string {
return string(bytes)
}
func ParseName(name string) string {
name = strings.ReplaceAll(name, " ", "-")
name = strings.ReplaceAll(name, "'", "-")
name = strings.ReplaceAll(name, "\"", "-")
name = strings.ReplaceAll(name, ";", "-")
return name
}

View File

@ -13,7 +13,6 @@ import (
"github.com/bjdgyc/anylink/base"
"github.com/bjdgyc/anylink/dbdata"
mapset "github.com/deckarep/golang-set"
atomic2 "go.uber.org/atomic"
)
var (
@ -41,15 +40,15 @@ type ConnSession struct {
CstpDpd int
Group *dbdata.Group
Limit *LimitRater
BandwidthUp atomic2.Uint32 // 使用上行带宽 Byte
BandwidthDown atomic2.Uint32 // 使用下行带宽 Byte
BandwidthUpPeriod atomic2.Uint32 // 前一周期的总量
BandwidthDownPeriod atomic2.Uint32
BandwidthUpAll atomic2.Uint64 // 使用上行带宽总量
BandwidthDownAll atomic2.Uint64 // 使用下行带宽总量
BandwidthUp atomic.Uint32 // 使用上行带宽 Byte
BandwidthDown atomic.Uint32 // 使用下行带宽 Byte
BandwidthUpPeriod atomic.Uint32 // 前一周期的总量
BandwidthDownPeriod atomic.Uint32
BandwidthUpAll atomic.Uint64 // 使用上行带宽总量
BandwidthDownAll atomic.Uint64 // 使用下行带宽总量
closeOnce sync.Once
CloseChan chan struct{}
LastDataTime atomic2.Time // 最后数据传输时间
LastDataTime atomic.Int64 // 最后数据传输时间
PayloadIn chan *Payload
PayloadOutCstp chan *Payload // Cstp的数据
PayloadOutDtls chan *Payload // Dtls的数据
@ -220,7 +219,7 @@ func (s *Session) NewConn() *ConnSession {
PayloadOutDtls: make(chan *Payload, 64),
dSess: &atomic.Value{},
}
cSess.LastDataTime.Store(time.Now())
cSess.LastDataTime.Store(time.Now().Unix())
dSess := &DtlsSession{
isActive: -1,