mirror of
				https://github.com/bjdgyc/anylink.git
				synced 2025-11-04 11:06:22 +08:00 
			
		
		
		
	@@ -4,6 +4,9 @@
 | 
				
			|||||||
[](https://pkg.go.dev/github.com/bjdgyc/anylink)
 | 
					[](https://pkg.go.dev/github.com/bjdgyc/anylink)
 | 
				
			||||||
[](https://goreportcard.com/report/github.com/bjdgyc/anylink)
 | 
					[](https://goreportcard.com/report/github.com/bjdgyc/anylink)
 | 
				
			||||||
[](https://codecov.io/gh/bjdgyc/anylink)
 | 
					[](https://codecov.io/gh/bjdgyc/anylink)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
AnyLink 是一个企业级远程办公sslvpn的软件,可以支持多人同时在线使用。
 | 
					AnyLink 是一个企业级远程办公sslvpn的软件,可以支持多人同时在线使用。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -204,9 +207,9 @@ eth_gateway="192.168.1.1"
 | 
				
			|||||||
sh bridge-init.sh
 | 
					sh bridge-init.sh
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Soft
 | 
					## 常见问题
 | 
				
			||||||
 | 
					
 | 
				
			||||||
相关软件下载: QQ群共享文件: 567510628
 | 
					请前往 [问题地址](question.md) 查看具体信息
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Discussion
 | 
					## Discussion
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -214,6 +217,8 @@ sh bridge-init.sh
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
添加QQ群: 567510628
 | 
					添加QQ群: 567510628
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QQ群共享文件有相关软件下载
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Contribution
 | 
					## Contribution
 | 
				
			||||||
 | 
					
 | 
				
			||||||
欢迎提交 PR、Issues,感谢为AnyLink做出贡献。 
 | 
					欢迎提交 PR、Issues,感谢为AnyLink做出贡献。 
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										7
									
								
								question.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								question.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,7 @@
 | 
				
			|||||||
 | 
					# 常见问题
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* 远程桌面连接
 | 
				
			||||||
 | 
					> 本软件不支持远程桌面连接,请注意。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* 私有证书问题
 | 
				
			||||||
 | 
					> 可以通过 https://github.com/square/certstrap 生成私有的证书, 然后把CA证书放在客户端机器上即可以连接。
 | 
				
			||||||
@@ -227,12 +227,19 @@ func userAccountMail(user *dbdata.User) error {
 | 
				
			|||||||
		return err
 | 
							return err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						setting := &dbdata.SettingOther{}
 | 
				
			||||||
 | 
						err = dbdata.SettingGet(setting)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							base.Error(err)
 | 
				
			||||||
 | 
							return err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	data := userAccountMailData{
 | 
						data := userAccountMailData{
 | 
				
			||||||
		LinkAddr: base.Cfg.LinkAddr,
 | 
							LinkAddr: setting.LinkAddr,
 | 
				
			||||||
		Group:    strings.Join(user.Groups, ","),
 | 
							Group:    strings.Join(user.Groups, ","),
 | 
				
			||||||
		Username: user.Username,
 | 
							Username: user.Username,
 | 
				
			||||||
		PinCode:  user.PinCode,
 | 
							PinCode:  user.PinCode,
 | 
				
			||||||
		OtpImg:   fmt.Sprintf("https://%s/otp_qr?id=%d&jwt=%s", base.Cfg.LinkAddr, user.Id, tokenString),
 | 
							OtpImg:   fmt.Sprintf("https://%s/otp_qr?id=%d&jwt=%s", setting.LinkAddr, user.Id, tokenString),
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	w := bytes.NewBufferString("")
 | 
						w := bytes.NewBufferString("")
 | 
				
			||||||
	t, _ := template.New("auth_complete").Parse(htmlBody)
 | 
						t, _ := template.New("auth_complete").Parse(htmlBody)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -30,7 +30,7 @@ var (
 | 
				
			|||||||
// rekey-method = ssl
 | 
					// rekey-method = ssl
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type ServerConfig struct {
 | 
					type ServerConfig struct {
 | 
				
			||||||
	LinkAddr      string `json:"link_addr"`
 | 
						// LinkAddr      string `json:"link_addr"`
 | 
				
			||||||
	ServerAddr    string `json:"server_addr"`
 | 
						ServerAddr    string `json:"server_addr"`
 | 
				
			||||||
	AdminAddr     string `json:"admin_addr"`
 | 
						AdminAddr     string `json:"admin_addr"`
 | 
				
			||||||
	ProxyProtocol bool   `json:"proxy_protocol"`
 | 
						ProxyProtocol bool   `json:"proxy_protocol"`
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -16,7 +16,6 @@ type config struct {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var configs = []config{
 | 
					var configs = []config{
 | 
				
			||||||
	{Typ: cfgStr, Name: "link_addr", Usage: "vpn服务对外地址", ValStr: "vpn.xx.com"},
 | 
					 | 
				
			||||||
	{Typ: cfgStr, Name: "server_addr", Usage: "前台服务监听地址", ValStr: ":443"},
 | 
						{Typ: cfgStr, Name: "server_addr", Usage: "前台服务监听地址", ValStr: ":443"},
 | 
				
			||||||
	{Typ: cfgStr, Name: "admin_addr", Usage: "后台服务监听地址", ValStr: ":8800"},
 | 
						{Typ: cfgStr, Name: "admin_addr", Usage: "后台服务监听地址", ValStr: ":8800"},
 | 
				
			||||||
	{Typ: cfgBool, Name: "proxy_protocol", Usage: "TCP代理协议", ValBool: false},
 | 
						{Typ: cfgBool, Name: "proxy_protocol", Usage: "TCP代理协议", ValBool: false},
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -21,12 +21,9 @@ issuer = "XX公司VPN"
 | 
				
			|||||||
admin_user = "admin"
 | 
					admin_user = "admin"
 | 
				
			||||||
#pass 123456
 | 
					#pass 123456
 | 
				
			||||||
admin_pass = "$2a$10$UQ7C.EoPifDeJh6d8.31TeSPQU7hM/NOM2nixmBucJpAuXDQNqNke"
 | 
					admin_pass = "$2a$10$UQ7C.EoPifDeJh6d8.31TeSPQU7hM/NOM2nixmBucJpAuXDQNqNke"
 | 
				
			||||||
jwt_secret = "iLmspvOiz*%ovfcs*wersdf#^heR8pNU^4XxBm&mW$aPCjSRMbYH#&"
 | 
					jwt_secret = "iLmspvOiz*%ovfcs*wersdf#heR8pNU4XxBm&mW$aPCjSRMbYH#&"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#vpn服务对外地址,影响开通邮件二维码
 | 
					 | 
				
			||||||
link_addr = "vpn.xx.com"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#前台服务监听地址
 | 
					#前台服务监听地址
 | 
				
			||||||
server_addr = ":443"
 | 
					server_addr = ":443"
 | 
				
			||||||
#后台服务监听地址
 | 
					#后台服务监听地址
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -55,6 +55,7 @@ func initData() {
 | 
				
			|||||||
	_ = SettingSet(smtp)
 | 
						_ = SettingSet(smtp)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	other := &SettingOther{
 | 
						other := &SettingOther{
 | 
				
			||||||
 | 
							LinkAddr:    "vpn.xx.com",
 | 
				
			||||||
		Banner:      "您已接入公司网络,请按照公司规定使用。\n请勿进行非工作下载及视频行为!",
 | 
							Banner:      "您已接入公司网络,请按照公司规定使用。\n请勿进行非工作下载及视频行为!",
 | 
				
			||||||
		AccountMail: accountMail,
 | 
							AccountMail: accountMail,
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -42,6 +42,7 @@ type SettingSmtp struct {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type SettingOther struct {
 | 
					type SettingOther struct {
 | 
				
			||||||
 | 
						LinkAddr    string `json:"link_addr"`
 | 
				
			||||||
	Banner      string `json:"banner"`
 | 
						Banner      string `json:"banner"`
 | 
				
			||||||
	AccountMail string `json:"account_mail"`
 | 
						AccountMail string `json:"account_mail"`
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -13,11 +13,6 @@ import (
 | 
				
			|||||||
	"github.com/gorilla/mux"
 | 
						"github.com/gorilla/mux"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func GetCertificate(*tls.ClientHelloInfo) (*tls.Certificate, error) {
 | 
					 | 
				
			||||||
	cert, err := tls.LoadX509KeyPair(base.Cfg.CertFile, base.Cfg.CertKey)
 | 
					 | 
				
			||||||
	return &cert, err
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func startTls() {
 | 
					func startTls() {
 | 
				
			||||||
	addr := base.Cfg.ServerAddr
 | 
						addr := base.Cfg.ServerAddr
 | 
				
			||||||
	certFile := base.Cfg.CertFile
 | 
						certFile := base.Cfg.CertFile
 | 
				
			||||||
@@ -28,7 +23,6 @@ func startTls() {
 | 
				
			|||||||
		NextProtos:         []string{"http/1.1"},
 | 
							NextProtos:         []string{"http/1.1"},
 | 
				
			||||||
		MinVersion:         tls.VersionTLS12,
 | 
							MinVersion:         tls.VersionTLS12,
 | 
				
			||||||
		InsecureSkipVerify: true,
 | 
							InsecureSkipVerify: true,
 | 
				
			||||||
		GetCertificate:     GetCertificate,
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	srv := &http.Server{
 | 
						srv := &http.Server{
 | 
				
			||||||
		Addr:      addr,
 | 
							Addr:      addr,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -8,6 +8,6 @@ User=root
 | 
				
			|||||||
WorkingDirectory= /usr/local/anylink-deploy
 | 
					WorkingDirectory= /usr/local/anylink-deploy
 | 
				
			||||||
Restart=on-failure
 | 
					Restart=on-failure
 | 
				
			||||||
RestartSec=5s
 | 
					RestartSec=5s
 | 
				
			||||||
ExecStart=/usr/local/anylink-deploy/anylink -conf=conf/server.toml
 | 
					ExecStart=/usr/local/anylink-deploy/anylink --conf=conf/server.toml
 | 
				
			||||||
[Install]
 | 
					[Install]
 | 
				
			||||||
WantedBy=multi-user.target
 | 
					WantedBy=multi-user.target
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -30,6 +30,14 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
      <el-tab-pane label="其他设置" name="dataOther">
 | 
					      <el-tab-pane label="其他设置" name="dataOther">
 | 
				
			||||||
        <el-form :model="dataOther" ref="dataOther" :rules="rules" label-width="100px" class="tab-one">
 | 
					        <el-form :model="dataOther" ref="dataOther" :rules="rules" label-width="100px" class="tab-one">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					          <el-form-item label="vpn对外地址" prop="link_addr">
 | 
				
			||||||
 | 
					            <el-input
 | 
				
			||||||
 | 
					                placeholder="请输入内容"
 | 
				
			||||||
 | 
					                v-model="dataOther.link_addr">
 | 
				
			||||||
 | 
					            </el-input>
 | 
				
			||||||
 | 
					          </el-form-item>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
          <el-form-item label="Banner信息" prop="banner">
 | 
					          <el-form-item label="Banner信息" prop="banner">
 | 
				
			||||||
            <el-input
 | 
					            <el-input
 | 
				
			||||||
                type="textarea"
 | 
					                type="textarea"
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user