买了个只有ipv6的vps,因为家里的网络ipv4/ipv6都可以访问,但是外出的时候网络大部分不支持ipv6,突然间想起来可以借助家里openwrt的ipv4/ipv6双栈网络开个转发来实现访问。
实现原理:在没有ipv6的情况在,访问家里的ipv4公网端口,然后用gost转发这个端口到ipv6的vps上实现访问。
首先下载openwrt适合的gost版本
mkdir gost
cd gost
wget https://github.com/ginuerzh/gost/releases/download/v2.12.0/gost_2.12.0_linux_arm64.tar.gz
tar zxvf gost_2.12.0_linux_arm64.tar.gz
然后填写gost的配置文件
vim config.yaml
services:
- name: service-gost-tcp
addr: :30022
handler:
type: rtcp
listener:
type: rtcp
forwarder:
nodes:
- name: target-gost-tcp
addr: "[2408:8748::1]:22" #需要转发的vps的ipv6地址
- name: service-gost-udp #udp的示例,22端口并不需要
addr: :30022
handler:
type: rudp
listener:
type: rudp
forwarder:
nodes:
- name: target-gost-udp
addr: "[2408:8748::1]:22
然后创建gost开机自动启动
vim /etc/init.d/gost
#!/bin/sh /etc/rc.common
# GOST init script for OpenWrt 24.10.0
START=99
STOP=10
# 配置 GOST 的路径和 PID 文件
PROG="/root/gost/gost"
CONFIG="/root/gost/config.yaml"
PIDFILE="/var/run/gost.pid"
# 启动服务(不输出日志)
start() {
if [ -e "$PIDFILE" ]; then
return 1
fi
# 启动 GOST 并丢弃所有输出
$PROG -C $CONFIG >/dev/null 2>&1 &
# 记录 PID
echo $! > $PIDFILE
}
# 停止服务
stop() {
if [ -e "$PIDFILE" ]; then
kill "$(cat $PIDFILE)" 2>/dev/null
rm -f "$PIDFILE"
fi
}
# 重启服务
restart() {
stop
start
}
# 设置开机自启
enabled() {
return 0
}
赋予开机启动脚本权限
chmod +x /etc/init.d/gost
/etc/init.d/gost enable #开机启动
/etc/init.d/gost start #启动服务
/etc/init.d/gost stop #停止服务
/etc/init.d/gost restart #重启服务
ps | grep gost #查询服务状态