买了个只有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 #查询服务状态