15 Commits

Author SHA1 Message Date
bjdgyc
9a712ca489 Merge pull request #81 from bjdgyc/dev
Dev
2022-02-15 15:44:31 +08:00
bjdgyc
e44e1dcf2a 修改版本号 2022-02-15 15:42:38 +08:00
bjdgyc
fce96753c5 修改默认路由 10.0.0.0/8 2022-02-15 15:39:58 +08:00
bjdgyc
77efe7583d Merge pull request #77 from bjdgyc/dependabot/npm_and_yarn/web/follow-redirects-1.14.8
Bump follow-redirects from 1.14.2 to 1.14.8 in /web
2022-02-15 14:59:24 +08:00
bjdgyc
1cbe9bfc30 Merge pull request #78 from bjdgyc/dev
Dev
2022-02-15 14:58:59 +08:00
bjdgyc
2e7afa9c35 修改后台https 2022-02-15 14:37:20 +08:00
dependabot[bot]
a58507f5a6 Bump follow-redirects from 1.14.2 to 1.14.8 in /web
Bumps [follow-redirects](https://github.com/follow-redirects/follow-redirects) from 1.14.2 to 1.14.8.
- [Release notes](https://github.com/follow-redirects/follow-redirects/releases)
- [Commits](https://github.com/follow-redirects/follow-redirects/compare/v1.14.2...v1.14.8)

---
updated-dependencies:
- dependency-name: follow-redirects
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-02-15 03:33:11 +00:00
bjdgyc
1989b235fe Merge pull request #76 from itviewer/dialog
操作成功,弹窗自动关闭
2022-02-09 10:38:36 +08:00
Xinjun Ma
21b047b307 操作成功,弹窗自动关闭 2022-01-25 19:42:52 +08:00
bjdgyc
2daad88159 Merge pull request #75 from itviewer/ssl
管理后台使用 https
2022-01-13 10:29:53 +08:00
Xinjun Ma
7c86513b0c 管理后台使用 https 2022-01-12 21:07:44 +08:00
bjdgyc
4b41e6c5b9 Update README.md 2022-01-11 13:40:44 +08:00
bjdgyc
684fea69d0 优化细节 2021-12-31 21:37:21 +08:00
bjdgyc
85e2ba0b0f 修改证书名称 2021-12-31 20:37:40 +08:00
bjdgyc
3fff44dde5 添加docker pulls 2021-12-31 18:38:28 +08:00
12 changed files with 168 additions and 15510 deletions

View File

@@ -6,6 +6,7 @@
[![codecov](https://codecov.io/gh/bjdgyc/anylink/branch/master/graph/badge.svg?token=JTFLIIIBQ0)](https://codecov.io/gh/bjdgyc/anylink) [![codecov](https://codecov.io/gh/bjdgyc/anylink/branch/master/graph/badge.svg?token=JTFLIIIBQ0)](https://codecov.io/gh/bjdgyc/anylink)
![GitHub release](https://img.shields.io/github/v/release/bjdgyc/anylink) ![GitHub release](https://img.shields.io/github/v/release/bjdgyc/anylink)
![GitHub downloads)](https://img.shields.io/github/downloads/bjdgyc/anylink/total) ![GitHub downloads)](https://img.shields.io/github/downloads/bjdgyc/anylink/total)
[![Docker pulls)](https://img.shields.io/docker/pulls/bjdgyc/anylink.svg)](https://hub.docker.com/r/bjdgyc/anylink)
![LICENSE](https://img.shields.io/github/license/bjdgyc/anylink) ![LICENSE](https://img.shields.io/github/license/bjdgyc/anylink)
AnyLink 是一个企业级远程办公 sslvpn 的软件,可以支持多人同时在线使用。 AnyLink 是一个企业级远程办公 sslvpn 的软件,可以支持多人同时在线使用。
@@ -36,6 +37,7 @@ AnyLink 服务端仅在 CentOS 7、Ubuntu 18.04 测试通过,如需要安装
> https://github.com/bjdgyc/anylink/releases > https://github.com/bjdgyc/anylink/releases
### 使用问题 ### 使用问题
> 对于测试环境,可以使用 vpn.test.vqilu.cn 绑定host进行测试 > 对于测试环境,可以使用 vpn.test.vqilu.cn 绑定host进行测试
> >
> 对于线上环境,必须申请安全的 https 证书,不支持私有证书连接 > 对于线上环境,必须申请安全的 https 证书,不支持私有证书连接
@@ -57,7 +59,7 @@ cd anylink-deploy
sudo ./anylink sudo ./anylink
# 默认管理后台访问地址 # 默认管理后台访问地址
# http://host:8800 # https://host:8800
# 默认账号 密码 # 默认账号 密码
# admin 123456 # admin 123456
@@ -69,6 +71,7 @@ sudo ./anylink
- [x] TLS-TCP 通道 - [x] TLS-TCP 通道
- [x] DTLS-UDP 通道 - [x] DTLS-UDP 通道
- [x] 兼容 AnyConnect - [x] 兼容 AnyConnect
- [x] 兼容 OpenConnect
- [x] 基于 tun 设备的 nat 访问模式 - [x] 基于 tun 设备的 nat 访问模式
- [x] 基于 tap 设备的桥接访问模式 - [x] 基于 tap 设备的桥接访问模式
- [x] 基于 macvtap 设备的桥接访问模式 - [x] 基于 macvtap 设备的桥接访问模式
@@ -113,7 +116,8 @@ sudo ./anylink
网络模式选择,需要配置 `link_mode` 参数,如 `link_mode="tun"`,`link_mode="macvtap"`,`link_mode="tap"(不推荐)` 等参数。 不同的参数需要对服务器做相应的设置。 网络模式选择,需要配置 `link_mode` 参数,如 `link_mode="tun"`,`link_mode="macvtap"`,`link_mode="tap"(不推荐)` 等参数。 不同的参数需要对服务器做相应的设置。
建议优先选择 tun 模式,其次选择 macvtap 模式,因客户端传输的是 IP 层数据,无须进行数据转换。 tap 模式是在用户态做的链路层到 IP 层的数据互相转换,性能会有所下降。 如果需要在虚拟机内开启 tap 模式,请确认虚拟机的网卡开启混杂模式。 建议优先选择 tun 模式,其次选择 macvtap 模式,因客户端传输的是 IP 层数据,无须进行数据转换。 tap 模式是在用户态做的链路层到 IP 层的数据互相转换,性能会有所下降。 如果需要在虚拟机内开启 tap
模式,请确认虚拟机的网卡开启混杂模式。
### tun 设置 ### tun 设置
@@ -125,6 +129,9 @@ net.ipv4.ip_forward = 1
#执行如下命令 #执行如下命令
sysctl -w net.ipv4.ip_forward=1 sysctl -w net.ipv4.ip_forward=1
# 查看设置是否生效
cat /proc/sys/net/ipv4/ip_forward
``` ```
2. 设置 nat 转发规则 2. 设置 nat 转发规则

View File

@@ -69,7 +69,7 @@ func StartAdmin() {
} }
base.Info("Listen admin", base.Cfg.AdminAddr) base.Info("Listen admin", base.Cfg.AdminAddr)
err := http.ListenAndServe(base.Cfg.AdminAddr, r) err := http.ListenAndServeTLS(base.Cfg.AdminAddr, base.Cfg.CertFile, base.Cfg.CertKey, r)
if err != nil { if err != nil {
base.Fatal(err) base.Fatal(err)
} }

View File

@@ -3,5 +3,5 @@ package base
const ( const (
APP_NAME = "AnyLink" APP_NAME = "AnyLink"
// 修复前端bug // 修复前端bug
APP_VER = "0.7.2" APP_VER = "0.7.3"
) )

View File

@@ -7,7 +7,7 @@
db_type = "sqlite3" db_type = "sqlite3"
db_source = "./conf/anylink.db" db_source = "./conf/anylink.db"
#证书文件 使用跟nginx一样的证书即可 #证书文件 使用跟nginx一样的证书即可
cert_file = "./conf/vpn_cert.pem" cert_file = "./conf/vpn_cert.crt"
cert_key = "./conf/vpn_cert.key" cert_key = "./conf/vpn_cert.key"
files_path = "./conf/files" files_path = "./conf/files"
profile = "./conf/profile.xml" profile = "./conf/profile.xml"

View File

@@ -7,9 +7,10 @@
db_type = "sqlite3" db_type = "sqlite3"
db_source = "./conf/anylink.db" db_source = "./conf/anylink.db"
#证书文件 #证书文件
cert_file = "./conf/vpn_cert.pem" cert_file = "./conf/vpn_cert.crt"
cert_key = "./conf/vpn_cert.key" cert_key = "./conf/vpn_cert.key"
files_path = "./conf/files" files_path = "./conf/files"
log_level = "debug"
#系统名称 #系统名称
issuer = "XX公司VPN" issuer = "XX公司VPN"

View File

@@ -102,7 +102,23 @@ func addInitData() error {
return err return err
} }
return sess.Commit() err = sess.Commit()
if err != nil {
return err
}
g1 := Group{
Name: "ops",
AllowLan: true,
ClientDns: []ValData{{Val: "114.114.114.114"}},
RouteInclude: []ValData{{Val: "10.0.0.0/8"}},
}
err = SetGroup(&g1)
if err != nil {
return err
}
return nil
} }
func CheckErrNotFound(err error) bool { func CheckErrNotFound(err error) bool {

View File

@@ -12,6 +12,7 @@ import (
const ( const (
Allow = "allow" Allow = "allow"
Deny = "deny" Deny = "deny"
All = "all"
) )
type GroupLinkAcl struct { type GroupLinkAcl struct {
@@ -65,25 +66,10 @@ func SetGroup(g *Group) error {
} }
// 判断数据 // 判断数据
clientDns := []ValData{}
for _, v := range g.ClientDns {
if v.Val != "" {
ip := net.ParseIP(v.Val)
if ip.String() != v.Val {
return errors.New("DNS IP 错误")
}
clientDns = append(clientDns, v)
}
}
if len(clientDns) == 0 {
return errors.New("必须设置一个DNS")
}
g.ClientDns = clientDns
routeInclude := []ValData{} routeInclude := []ValData{}
for _, v := range g.RouteInclude { for _, v := range g.RouteInclude {
if v.Val != "" { if v.Val != "" {
if v.Val == "all" { if v.Val == All {
routeInclude = append(routeInclude, v) routeInclude = append(routeInclude, v)
continue continue
} }
@@ -124,6 +110,24 @@ func SetGroup(g *Group) error {
} }
g.LinkAcl = linkAcl g.LinkAcl = linkAcl
// DNS 判断
clientDns := []ValData{}
for _, v := range g.ClientDns {
if v.Val != "" {
ip := net.ParseIP(v.Val)
if ip.String() != v.Val {
return errors.New("DNS IP 错误")
}
clientDns = append(clientDns, v)
}
}
if len(routeInclude) == 0 || (len(routeInclude) == 1 && routeInclude[0].Val == "all") {
if len(clientDns) == 0 {
return errors.New("默认路由必须设置一个DNS")
}
}
g.ClientDns = clientDns
g.UpdatedAt = time.Now() g.UpdatedAt = time.Now()
if g.Id > 0 { if g.Id > 0 {
err = Set(g) err = Set(g)

View File

@@ -10,6 +10,7 @@ import (
"strings" "strings"
"github.com/bjdgyc/anylink/base" "github.com/bjdgyc/anylink/base"
"github.com/bjdgyc/anylink/dbdata"
"github.com/bjdgyc/anylink/sessdata" "github.com/bjdgyc/anylink/sessdata"
) )
@@ -108,7 +109,7 @@ func LinkTunnel(w http.ResponseWriter, r *http.Request) {
} }
// 允许的路由 // 允许的路由
for _, v := range cSess.Group.RouteInclude { for _, v := range cSess.Group.RouteInclude {
if v.Val == "all" { if v.Val == dbdata.All {
continue continue
} }
HttpAddHeader(w, "X-CSTP-Split-Include", v.IpMask) HttpAddHeader(w, "X-CSTP-Split-Include", v.IpMask)

15575
web/package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -423,6 +423,7 @@ export default {
if (rdata.code === 0) { if (rdata.code === 0) {
this.$message.success(rdata.msg); this.$message.success(rdata.msg);
this.getData(1); this.getData(1);
this.user_edit_dialog = false
} else { } else {
this.$message.error(rdata.msg); this.$message.error(rdata.msg);
} }

View File

@@ -388,6 +388,7 @@ export default {
if (data.code === 0) { if (data.code === 0) {
this.$message.success(data.msg); this.$message.success(data.msg);
this.getData(1); this.getData(1);
this.user_edit_dialog = false
} else { } else {
this.$message.error(data.msg); this.$message.error(data.msg);
} }