add tls layer, fix websocket hostname

This commit is contained in:
Page Fault
2020-06-13 15:09:05 +00:00
parent f676c4ee29
commit 7b9399f66c
36 changed files with 971 additions and 747 deletions
+6 -2
View File
@@ -10,6 +10,7 @@ import (
"github.com/p4gefau1t/trojan-go/tunnel/shadowsocks"
"github.com/p4gefau1t/trojan-go/tunnel/simplesocks"
"github.com/p4gefau1t/trojan-go/tunnel/socks"
"github.com/p4gefau1t/trojan-go/tunnel/tls"
"github.com/p4gefau1t/trojan-go/tunnel/transport"
"github.com/p4gefau1t/trojan-go/tunnel/trojan"
"github.com/p4gefau1t/trojan-go/tunnel/websocket"
@@ -18,8 +19,11 @@ import (
const Name = "CLIENT"
// GenerateClientTree generate general outbound protocol stack
func GenerateClientTree(muxEnabled bool, wsEnabled bool, ssEnabled bool, routerEnabled bool) []string {
func GenerateClientTree(transportPlugin bool, muxEnabled bool, wsEnabled bool, ssEnabled bool, routerEnabled bool) []string {
clientStack := []string{transport.Name}
if !transportPlugin {
clientStack = append(clientStack, tls.Name)
}
if wsEnabled {
clientStack = append(clientStack, websocket.Name)
}
@@ -40,7 +44,7 @@ func init() {
proxy.RegisterProxyCreator(Name, func(ctx context.Context) (*proxy.Proxy, error) {
cfg := config.FromContext(ctx, Name).(*Config)
serverStack := []string{socks.Name}
clientStack := GenerateClientTree(cfg.Mux.Enabled, cfg.Websocket.Enabled, cfg.Shadowsocks.Enabled, cfg.Router.Enabled)
clientStack := GenerateClientTree(cfg.TransportPlugin.Enabled, cfg.Mux.Enabled, cfg.Websocket.Enabled, cfg.Shadowsocks.Enabled, cfg.Router.Enabled)
c, err := proxy.CreateClientStack(ctx, clientStack)
if err != nil {
return nil, err
+9 -4
View File
@@ -18,11 +18,16 @@ type ShadowsocksConfig struct {
Enabled bool `json,yaml:"enabled"`
}
type TransportPluginConfig struct {
Enabled bool `json,yaml:"enabled"`
}
type Config struct {
Mux MuxConfig `json,yaml:"mux"`
Websocket WebsocketConfig `json,yaml:"websocket"`
Router RouterConfig `json,yaml:"router"`
Shadowsocks ShadowsocksConfig `json,yaml:"shadowsocks"`
Mux MuxConfig `json,yaml:"mux"`
Websocket WebsocketConfig `json,yaml:"websocket"`
Router RouterConfig `json,yaml:"router"`
Shadowsocks ShadowsocksConfig `json,yaml:"shadowsocks"`
TransportPlugin TransportPluginConfig `json:"transport_plugin" yaml:"transport-plugin"`
}
func init() {
+1 -1
View File
@@ -15,7 +15,7 @@ func init() {
proxy.RegisterProxyCreator(Name, func(ctx context.Context) (*proxy.Proxy, error) {
cfg := config.FromContext(ctx, Name).(*client.Config)
serverStack := []string{dokodemo.Name}
clientStack := client.GenerateClientTree(cfg.Mux.Enabled, cfg.Websocket.Enabled, cfg.Shadowsocks.Enabled, cfg.Router.Enabled)
clientStack := client.GenerateClientTree(cfg.TransportPlugin.Enabled, cfg.Mux.Enabled, cfg.Websocket.Enabled, cfg.Shadowsocks.Enabled, cfg.Router.Enabled)
c, err := proxy.CreateClientStack(ctx, clientStack)
if err != nil {
return nil, err
+1 -1
View File
@@ -17,7 +17,7 @@ func init() {
proxy.RegisterProxyCreator(Name, func(ctx context.Context) (*proxy.Proxy, error) {
cfg := config.FromContext(ctx, Name).(*client.Config)
serverStack := []string{tproxy.Name}
clientStack := client.GenerateClientTree(cfg.Mux.Enabled, cfg.Websocket.Enabled, cfg.Shadowsocks.Enabled, false)
clientStack := client.GenerateClientTree(cfg.TransportPlugin.Enabled, cfg.Mux.Enabled, cfg.Websocket.Enabled, cfg.Shadowsocks.Enabled, false)
c, err := proxy.CreateClientStack(ctx, clientStack)
if err != nil {
return nil, err
+9 -3
View File
@@ -5,11 +5,12 @@ import (
"github.com/p4gefau1t/trojan-go/config"
"github.com/p4gefau1t/trojan-go/proxy"
"github.com/p4gefau1t/trojan-go/proxy/client"
"github.com/p4gefau1t/trojan-go/tunnel/freedom"
"github.com/p4gefau1t/trojan-go/tunnel/mux"
"github.com/p4gefau1t/trojan-go/tunnel/raw"
"github.com/p4gefau1t/trojan-go/tunnel/router"
"github.com/p4gefau1t/trojan-go/tunnel/shadowsocks"
"github.com/p4gefau1t/trojan-go/tunnel/simplesocks"
"github.com/p4gefau1t/trojan-go/tunnel/tls"
"github.com/p4gefau1t/trojan-go/tunnel/transport"
"github.com/p4gefau1t/trojan-go/tunnel/trojan"
"github.com/p4gefau1t/trojan-go/tunnel/websocket"
@@ -24,10 +25,11 @@ func init() {
if err != nil {
return nil, err
}
clientStack := []string{raw.Name}
clientStack := []string{freedom.Name}
if cfg.Router.Enabled {
clientStack = []string{raw.Name, router.Name}
clientStack = []string{freedom.Name, router.Name}
}
root := &proxy.Node{
Name: transport.Name,
Next: make(map[string]*proxy.Node),
@@ -36,6 +38,10 @@ func init() {
Server: s,
}
if !cfg.TransportPlugin.Enabled {
root = root.BuildNext(tls.Name)
}
trojanSubTree := root
if cfg.Shadowsocks.Enabled {
trojanSubTree = trojanSubTree.BuildNext(shadowsocks.Name)