• 支持按用户分组管理多条转发规则,可为每个用户设置独立流量配额,并通过 SQLite 持久化流量统计
• 内置主备切换与健康检查机制,TCP 规则可自动回切主目标,适合高可用转发场景
• 提供域名解析缓存、HTTP 查询 API 与
https://github.com/Yuu518/ports-box
https://ip4p.xxxxxxxxxxxxx.com/a?v=1 时, 自动根据 IP4P 信息重定向 https://ip4p.xxxxxxxxxxxxx.com:1234/a?v=1, 且 IP 为 真实打洞 IP
Shortcut-FE 流量分载
[], 例 [2606:4700:4700::64]使用 golang 实现的 tcp udp 端口转发
目前已实现:
规则热加载
web 管理面板
流量统计
支持:Linux、Windows、MacOS(MacOS 需要自行编译)
IP4P 节点和 ip4p.web.com 这个服务可以正常使用ipv6: true
dns:
ipv6: true
experimental:
dialer-ip4p-convert: true
proxies:
- name: IP4P
server: ip4p.proxy.com
port: 1
...
rules:
- DOMAIN,ip4p.web.com,DIRECThttp://ip4p.com/a?v=1 时, 自动根据 IP4P 信息重定向为 http://1.1.1.1:1234/a?v=1~/.ssh/ip4p.sh:#!/usr/bin/env bash
host=$1
raw=$(dig +short -t aaaa $host)
port=$((0x$(echo ${raw} | awk -F: '{ print $3 }')))
ipab=$((0x$(echo ${raw} | awk -F: '{ print $4 }')))
ipcd=$((0x$(echo ${raw} | awk -F: '{ print $5 }')))
ipa=$((${ipab} >> 8))
ipb=$((${ipab} & 0xff))
ipc=$((${ipcd} >> 8))
ipd=$((${ipcd} & 0xff))
exec nc ${ipa}.${ipb}.${ipc}.${ipd} ${port}~/.ssh/config:Host ip4p
HostName ip4p.com
User root
Port 2222
IdentityFile ~/.ssh/id_rsa
ProxyCommand /bin/bash ~/.ssh/ip4p.sh %h
ZONE=''
RECORD=''
EMAIL=''
AUTH=''
DOMAIN=''
ipa=$(echo ${ip} | cut -d'.' -f1)
ipb=$(echo ${ip} | cut -d'.' -f2)
ipc=$(echo ${ip} | cut -d'.' -f3)
ipd=$(echo ${ip} | cut -d'.' -f4)
ipab=$(printf '%02x%02x' ${ipa} ${ipb})
ipcd=$(printf '%02x%02x' ${ipc} ${ipd})
porthex=$(printf '%04x' ${port})
IP4P="2001::${porthex}:${ipab}:${ipcd}"
echo $IP4P
while true; do
curl -X PUT "https://api.cloudflare.com/client/v4/zones/${ZONE}/dns_records/${RECORD}" \
-H "X-Auth-Email: ${EMAIL}" \
-H "Authorization: Bearer ${AUTH}" \
-H "Content-Type:application/json" \
--data "{\"type\":\"AAAA\",\"name\":\"${DOMAIN}\",\"content\":\"${IP4P}\",\"ttl\":60,\"proxied\":false}"
if [ $? -eq 0 ]; then
break
fi
doneZONE=''
RECORD=''
EMAIL=''
AUTH=''
DOMAIN=''
ipa=$(echo ${ip} | cut -d'.' -f1)
ipb=$(echo ${ip} | cut -d'.' -f2)
ipc=$(echo ${ip} | cut -d'.' -f3)
ipd=$(echo ${ip} | cut -d'.' -f4)
ipab=$(printf '%02x%02x' ${ipa} ${ipb})
ipcd=$(printf '%02x%02x' ${ipc} ${ipd})
porthex=$(printf '%04x' ${port})
IP4P="2001::${porthex}:${ipab}:${ipcd}"
echo $IP4P
while true; do
curl -X PUT "https://api.cloudflare.com/client/v4/zones/${ZONE}/dns_records/${RECORD}" \
-H "X-Auth-Email: ${EMAIL}" \
-H "Authorization: Bearer ${AUTH}" \
-H "Content-Type:application/json" \
--data "{\"type\":\"AAAA\",\"name\":\"${DOMAIN}\",\"content\":\"${IP4P}\",\"ttl\":60,\"proxied\":false}"
if [ $? -eq 0 ]; then
break
fi
done/etc/gost/gost.yamla.foo.com -> 127.0.0.1:2053127.0.0.1:8443services:
- name: sni-router-443
addr: ":443"
handler: {type: tcp, metadata: {sniffing: true}}
listener: {type: tcp}
forwarder:
nodes:
- {name: caddy, addr: 127.0.0.1:2053, matcher: {rule: 'Host(`a.foo.com`)'}}
- {name: fallback, addr: 127.0.0.1:8443}
log: {level: warn, format: text, output: stdout}/etc/systemd/system/gost.service:
[Unit]
Description=GOST SNI router
Documentation=https://gost.run/
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=gost
Group=gost
AmbientCapabilities=CAP_NET_BIND_SERVICE
CapabilityBoundingSet=CAP_NET_BIND_SERVICE
NoNewPrivileges=true
ExecStart=/usr/local/bin/gost -C /etc/gost/gost.yaml
Restart=on-failure
RestartSec=3s
LimitNOFILE=1048576
[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl enable --now gost[], 例 [2606:4700:4700::64]
wget https://github.com/go-gost/gost/releases/download/v3.0.0-rc8/gost_3.0.0-rc8_linux_amd64v3.tar.gz
tar -xzf gost_3.0.0-rc8_linux_amd64v3.tar.gz
chmod a+x gost
mv gost /usr/local/bin/
/etc/systemd/system/gost.service:
[Unit]
Description=gost
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
ExecStart=/usr/local/bin/gost -L tcp://:2211/1.2.3.4:21 -L udp://:2211/1.2.3.4:21
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=gost
[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl enable --now gost.service/usr/local/bin/gost -L "socks5://zhetengsha:bXs8VqrUos@:65535?limiter.in=100MB&limiter.out=100MB&limiter.conn.in=10MB&limiter.conn.out=10MB"zhetengsha:[email protected]:65535