使用自定义流程实现网关协议解析转发功能

This commit is contained in:
2025-02-24 17:21:47 +08:00
parent 10a4f010ce
commit 83f4f06740
25 changed files with 1424 additions and 139 deletions

View File

@@ -1,42 +0,0 @@
Remove-Job *
$tasks = 0
$start = Get-Date
$tasks++
Write-Output "building proxy for windows amd64..."
Start-Job -ScriptBlock {
$env:GOOS = "windows"; $env:GOARCH = "amd64"; go build -ldflags '-w -s' -o bin/proxy_win_amd64.exe main.go
} | Out-Null
$tasks++
Write-Output "building proxy for linux amd64..."
Start-Job -ScriptBlock {
$env:GOOS = "linux"; $env:GOARCH = "amd64"; go build -ldflags '-w -s' -o bin/proxy_linux_amd64 main.go
} | Out-Null
$tasks++
Write-Output "building proxy for linux arm64..."
Start-Job -ScriptBlock {
$env:GOOS = "linux"; $env:GOARCH = "arm64"; go build -ldflags '-w -s' -o bin/proxy_linux_arm64 main.go
} | Out-Null
# Wait for all jobs to complete
while ($tasks -gt 0)
{
foreach ($job in Get-Job)
{
if ($job.State -eq "Completed")
{
$tasks--
$job | Receive-Job
$job | Remove-Job
}
}
}
$end = Get-Date
Write-Output "build completed"
Write-Output "time taken: $( ($end - $start).TotalSeconds ) seconds"
Write-Output "output files are in ./bin/"

View File

@@ -1,38 +0,0 @@
name: proxy-server
services:
frp:
container_name: proxy-server-dev-frp
build:
context: ./frp
dockerfile: Dockerfile
ports:
- "18080:18080"
- "20000-20100:20000-20100"
networks:
- proxy-server-dev
restart: always
postgres:
container_name: proxy-server-dev-postgres
image: postgres:17
environment:
POSTGRES_DB: $DB_DATABASE
POSTGRES_USER: $DB_USERNAME
POSTGRES_PASSWORD: $DB_PASSWORD
ports:
- "${DB_PORT}:5432"
volumes:
- postgres-data:/var/lib/postgresql/data
networks:
- proxy-server-dev
restart: always
networks:
proxy-server-dev:
driver: bridge
volumes:
postgres-data:
name: proxy-server-dev-postgres-data

View File

@@ -1,10 +0,0 @@
FROM ubuntu:20.04
WORKDIR /app
COPY frps frps
COPY frps.toml frps.toml
EXPOSE 18080
CMD ["./frps", "-c", "frps.toml"]

Binary file not shown.

View File

@@ -1,14 +0,0 @@
bindPort = 18080
transport.tcpMux = true
[[httpPlugins]]
name = "chan-req"
addr = "host.docker.internal:8080"
path = "/chan/request"
ops = ["NewUserConn"]
[[httpPlugins]]
name = "chan-test"
addr = "host.docker.internal:8080"
path = "/chan/test"
ops = ["NewProxy", "NewWorkConn"]

View File

@@ -1,73 +0,0 @@
-- nodes
DROP TABLE IF EXISTS nodes;
CREATE TABLE nodes (
id SERIAL PRIMARY KEY,
name VARCHAR(255) NOT NULL UNIQUE,
provider VARCHAR(255) NOT NULL,
location VARCHAR(255) NOT NULL,
ip_address VARCHAR(255) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
deleted_at TIMESTAMP
);
CREATE INDEX devices_provider_index ON nodes (provider);
CREATE INDEX devices_location_index ON nodes (location);
-- users
DROP TABLE IF EXISTS users;
CREATE TABLE users (
id SERIAL PRIMARY KEY,
password VARCHAR(255) NOT NULL,
username VARCHAR(255) NOT NULL UNIQUE,
email VARCHAR(255) NOT NULL UNIQUE,
phone VARCHAR(255) NOT NULL UNIQUE,
name VARCHAR(255) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
deleted_at TIMESTAMP
);
-- user_ips
DROP TABLE IF EXISTS user_ips;
CREATE TABLE user_ips (
id SERIAL PRIMARY KEY,
user_id int NOT NULL REFERENCES users (id)
ON UPDATE CASCADE
ON DELETE CASCADE,
ip_address VARCHAR(255) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
deleted_at TIMESTAMP
);
CREATE INDEX user_ips_user_id_index ON user_ips (user_id);
CREATE INDEX user_ips_ip_address_index ON user_ips (ip_address);
-- channel
DROP TABLE IF EXISTS channels;
CREATE TABLE channels (
id SERIAL PRIMARY KEY,
user_id int NOT NULL REFERENCES users (id)
ON UPDATE CASCADE
ON DELETE CASCADE,
node_id int NOT NULL REFERENCES nodes (id) --
ON UPDATE CASCADE --
ON DELETE SET NULL, -- 节点删除后,用户侧需要保留提取记录
forward_snapshot VARCHAR(255),
protocol VARCHAR(255),
auth_ip bool,
auth_pass bool,
username VARCHAR(255),
password VARCHAR(255),
expiration TIMESTAMP NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
deleted_at TIMESTAMP
);
CREATE INDEX channel_user_id_index ON channels (user_id);
CREATE INDEX channel_node_id_index ON channels (node_id);
-- ====================
-- 填充数据
-- ====================

View File

@@ -1,4 +0,0 @@
====================
删除 channels.target_snapshot 不需要目标地址快照
添加 channels.auth_ip 是否验证白名单
添加 channels.auth_pass 是否验证密码

View File

@@ -1,59 +0,0 @@
name: proxy-server
services:
frp:
container_name: proxy-server-dev-frp
build:
context: ./frp
dockerfile: Dockerfile
ports:
- "18080:18080"
- "20000-20100:20000-20100"
networks:
- proxy-server-test
restart: always
postgres:
container_name: proxy-server-dev-postgres
image: postgres:17
environment:
POSTGRES_DB: $DB_DATABASE
POSTGRES_USER: $DB_USERNAME
POSTGRES_PASSWORD: $DB_PASSWORD
ports:
- "${DB_PORT}:5432"
volumes:
- postgres-data:/var/lib/postgresql/data
networks:
- proxy-server-test
restart: always
service:
container_name: proxy-server-dev-service
build:
context: ../..
dockerfile: Dockerfile
environment:
PORT: $PORT
DB_HOST: $DB_HOST
DB_PORT: $DB_PORT
DB_DATABASE: $DB_DATABASE
DB_USERNAME: $DB_USERNAME
DB_PASSWORD: $DB_PASSWORD
DB_TIMEZONE: $DB_TIMEZONE
ports:
- "${PORT}:${PORT}"
networks:
- proxy-server-test
depends_on:
- postgres
restart: always
networks:
proxy-server-test:
driver: bridge
volumes:
postgres-data:
name: proxy-server-test-postgres-data

View File

@@ -1,10 +0,0 @@
FROM ubuntu:20.04
WORKDIR /app
COPY frps frps
COPY frps.toml frps.toml
EXPOSE 18080
CMD ["./frps", "-c", "frps.toml"]

Binary file not shown.

View File

@@ -1,8 +0,0 @@
bindPort = 18080
transport.tcpMux = true
[[httpPlugins]]
name = "chan-req"
addr = "service:8080"
path = "/chan/request"
ops = ["NewUserConn"]