内网穿透goproxy

概述

为了解决在各个局域网内暴露服务到稳定的主机上,方便其他内网调用

实现拓扑

image

通过内网穿透把内网服务暴露到稳定的服务器上,从而实现服务的互联

goproxy

docs

bridge/server(服务暴露在稳定的主机上)

cd /servyou/proxy-linux-amd64/
./start_proxy.sh 20001 10001 80

解释:
./start_proxy.sh bridge_port  server_port  local_port
bridge_port 是提供中转的服务端口
server_port 是本地提供服务端口在内网机上映射的端口
local_port  是本地机器提供服务的端口

start_proxy.sh

#!/bin/sh
set -e

## var
bridge_port=${1}
server_port=${2}
local_port=${3}

## judge
if [[ -z $1 || -z $2 || -z $3 ]]; then
    echo "bridge $1,server $2, local $3 not allow nil!!!"
    echo "+++++++++++++++++++++++++++++++++++++++++++++"
    echo "used: $0 bridge_port server_port local_port"
    exit 8
fi

## port
if ss -lnt |grep $1 &>/dev/null ; then
    echo "bridge_port $1 端口被占用"
    exit 9
fi 

if ss -lnt |grep $2 &>/dev/null; then
    echo "server_port $2 端口被占用"
    exit 9
fi

## statr server/bridge

#bridge
nohup ./proxy bridge -p ":${1}" -C .cert/proxy.crt -K .cert/proxy.key &>logs/bridge_${1} &
echo $! >pids/pid_bridge_${1}

#server
nohup ./proxy server -r ":${2}@:${3}" -P "127.0.0.1:${1}" -C .cert/proxy.crt -K .cert/proxy.key &>logs/server_${1} &
echo $! >pids/pid_server_${2}

client(局域网)

./proxy.exe client -P "10.199.x.y:20001" -C .cert/proxy.crt -K .cert/proxy.key

解释:
./proxy.exe client -P "10.199.x.y:20001" -C .cert/proxy.crt -K .cert/proxy.key
-P bridge_server:bridge_port

http://10.199.x.y:10001/xxx

goproxy(内网穿透)

内网穿透由三部分组成:client端,server端,bridge端;client和server主动连接bridge端进行桥接。

//TCP普通用法
背景:
公司机器A提供了web服务80端口
有VPS一个,公网IP:22.22.22.22
需求:
在家里能够通过访问VPS的28080端口访问到公司机器A的80端口

步骤:
在vps上执行
proxy bridge -p ":33080" -C proxy.crt -K proxy.key
proxy server -r ":28080@:80" -P "127.0.0.1:33080" -C proxy.crt -K proxy.key

在公司机器A上面执行
proxy client -P "22.22.22.22:33080" -C proxy.crt -K proxy.key

//UDP普通用法
背景:
公司机器A提供了DNS解析服务,UDP:53端口
有VPS一个,公网IP:22.22.22.22

需求:
在家里能够通过设置本地dns为22.22.22.22,使用公司机器A进行域名解析服务。

步骤:
在vps上执行
proxy bridge -p ":33080" -C proxy.crt -K proxy.key
proxy server --udp -r ":53@:53" -P "127.0.0.1:33080" -C proxy.crt -K proxy.key

在公司机器A上面执行
proxy client -P "22.22.22.22:33080" -C proxy.crt -K proxy.key
完成

//高级用法一
背景:
公司机器A提供了web服务80端口
有VPS一个,公网IP:22.22.22.22
需求:
为了安全,不想在VPS上能够访问到公司机器A,在家里能够通过访问本机的28080端口,
通过加密隧道访问到公司机器A的80端口。

步骤:
在vps上执行
proxy bridge -p ":33080" -C proxy.crt -K proxy.key

在公司机器A上面执行
proxy client -P "22.22.22.22:33080" -C proxy.crt -K proxy.key

在家里电脑上执行
proxy server -r ":28080@:80" -P "22.22.22.22:33080" -C proxy.crt -K proxy.key

//高级用法二
提示:
如果同时有多个client连接到同一个bridge,需要指定不同的key,可以通过--k参数设定,--k可以是任意唯一字符串,
只要在同一个bridge上唯一即可。
server连接到bridge的时候,如果同时有多个client连接到同一个bridge,需要使用--k参数选择client。
暴露多个端口重复-r参数即可.-r格式是:"本地IP:本地端口@clientHOST:client端口"。

背景:
公司机器A提供了web服务80端口,ftp服务21端口
有VPS一个,公网IP:22.22.22.22
需求:
在家里能够通过访问VPS的28080端口访问到公司机器A的80端口
在家里能够通过访问VPS的29090端口访问到公司机器A的21端口

步骤:
在vps上执行
proxy bridge -p ":33080" -C proxy.crt -K proxy.key
proxy server -r ":28080@:80" -r ":29090@:21" --k test -P "127.0.0.1:33080" -C proxy.crt -K proxy.key

在公司机器A上面执行
proxy client --k test -P "22.22.22.22:33080" -C proxy.crt -K proxy.key


//server的-r参数
-r完整格式是:PROTOCOL://LOCAL_IP:LOCAL_PORT@[CLIENT_KEY]CLIENT_LOCAL_HOST:CLIENT_LOCAL_PORT

//协议PROTOCOL:tcp、udp、ptcp、pudp。
比如: -r "udp://:10053@:53" -r "tcp://:10800@:1080" -r ":8080@:80"
如果指定了--udp参数,PROTOCOL默认为udp,那么:-r ":8080@:80"默认为udp;
如果没有指定--udp参数,PROTOCOL默认为tcp,那么:-r ":8080@:80"默认为tcp;

//CLIENT_KEY:默认是default。
比如: -r "udp://:10053@[test1]:53" -r "tcp://:10800@[test2]:1080" -r ":8080@:80"
如果指定了--k参数,比如--k test,那么:-r ":8080@:80"CLIENT_KEY默认为test;
如果没有指定--k参数,那么:-r ":8080@:80"CLIENT_KEY默认为default;

//LOCAL_IP为空默认是:0.0.0.0,CLIENT_LOCAL_HOST为空默认是:127.0.0.1

link

posted @ 2023-02-02 10:08  mvpbang  阅读(827)  评论(0编辑  收藏  举报