Skip to content

Instantly share code, notes, and snippets.

@njhsi
Last active November 28, 2022 23:40
Show Gist options
  • Save njhsi/8d8c90168c27ec6824514ed9b17e6332 to your computer and use it in GitHub Desktop.
Save njhsi/8d8c90168c27ec6824514ed9b17e6332 to your computer and use it in GitHub Desktop.
patch for v2ray-plugin to enable reverse port tunnel (server8000 -> client8000)
diff --git a/main.go b/main.go
index 2212ddf..1ecab32 100644
--- a/main.go
+++ b/main.go
@@ -19,6 +19,8 @@ import (
"v2ray.com/core/app/dispatcher"
"v2ray.com/core/app/proxyman"
+ "v2ray.com/core/app/reverse"
+ "v2ray.com/core/app/router"
_ "v2ray.com/core/app/proxyman/inbound"
_ "v2ray.com/core/app/proxyman/outbound"
@@ -209,8 +211,21 @@ func generateConfig() (*core.Config, error) {
proxyAddress = net.ParseAddress("v1.mux.cool")
}
localAddrs := parseLocalAddr(*localAddr)
- inbounds := make([]*core.InboundHandlerConfig, len(localAddrs))
-
+ inbounds := make([]*core.InboundHandlerConfig, len(localAddrs)+1)
+ inbounds[len(localAddrs)] = &core.InboundHandlerConfig{
+ Tag: "external",
+ ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
+ PortRange: net.SinglePortRange(8000),
+ Listen: net.NewIPOrDomain(net.LocalHostIP),
+ }),
+ ProxySettings: serial.ToTypedMessage(&dokodemo.Config{
+ Address: net.NewIPOrDomain(net.LocalHostIP),
+ Port: uint32(8000),
+ NetworkList: &net.NetworkList{
+ Network: []net.Network{net.Network_TCP},
+ },
+ }),
+ }
for i := 0; i < len(localAddrs); i++ {
inbounds[i] = &core.InboundHandlerConfig{
ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
@@ -230,7 +245,26 @@ func generateConfig() (*core.Config, error) {
Outbound: []*core.OutboundHandlerConfig{{
ProxySettings: outboundProxy,
}},
- App: apps,
+ App: append(apps, serial.ToTypedMessage(&reverse.Config{
+ PortalConfig: []*reverse.PortalConfig{{
+ Tag: "portal",
+ Domain: "test.v2ray.com",
+ }},
+ }),
+ serial.ToTypedMessage(&router.Config{
+ Rule: []*router.RoutingRule{
+ {
+ Domain: []*router.Domain{{Type: router.Domain_Full, Value: "test.v2ray.com"},},
+ TargetTag: &router.RoutingRule_Tag{ Tag: "portal", },
+ },
+ {
+ InboundTag: []string{"external"},
+ TargetTag: &router.RoutingRule_Tag{ Tag: "portal", },
+ },
+ },
+ }),
+ ),
+
}, nil
} else {
senderConfig := proxyman.SenderConfig{StreamSettings: &streamConfig}
@@ -251,8 +285,31 @@ func generateConfig() (*core.Config, error) {
Outbound: []*core.OutboundHandlerConfig{{
SenderSettings: serial.ToTypedMessage(&senderConfig),
ProxySettings: outboundProxy,
+ Tag: "tunnel",
+ }, {
+ Tag: "freedom",
+ ProxySettings: serial.ToTypedMessage(&freedom.Config{}),
}},
- App: apps,
+ App: append(apps,
+ serial.ToTypedMessage(&reverse.Config{
+ BridgeConfig: []*reverse.BridgeConfig{{
+ Tag: "bridge",
+ Domain: "test.v2ray.com",
+ }},
+ }),
+ serial.ToTypedMessage(&router.Config{
+ Rule: []*router.RoutingRule{
+ {
+ Domain: []*router.Domain{{Type: router.Domain_Full, Value: "test.v2ray.com"},},
+ TargetTag: &router.RoutingRule_Tag{ Tag: "tunnel", },
+ },
+ {
+ InboundTag: []string{"bridge"},
+ TargetTag: &router.RoutingRule_Tag{ Tag: "freedom", },
+ },
+ },
+ }),
+ ),
}, nil
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment