如果防火墙不支持自动IPv6到IPv4
如果上面的方案不行,使用这个替代方案:
opkg update
opkg install socat
方案2:极简脚本文件 + 启动项
# 创建极简脚本 cat > /root/nas-start << 'EOF' #!/bin/sh # 极简启动,无日志 # 清理旧的 killall socat 2>/dev/null sleep 1 # 获取NAS IPv6 NAS_MAC="bc:24:11:39:bc:d9" NAS_IPV6=$(ip -6 neigh show | grep -i "$NAS_MAC" | grep '240e:' | awk '{print $1}' | head -1) if [ -n "$NAS_IPV6" ]; then # 启动端口转发 for port in 80 443 5666 3031; do socat TCP6-LISTEN:${port},fork,reuseaddr,ipv6only=1 TCP6:[${NAS_IPV6}]:${port} & done fi EOF chmod +x /root/nas-start
然后在本地启动脚本中添加:
# NAS IPv6转发 (sleep 50 && /root/nas-start) &
方案3:带自动恢复的无日志监控
cat > /root/nas-monitor << 'EOF' #!/bin/sh # 无日志监控脚本 NAS_MAC="bc:24:11:39:bc:d9" while true; do sleep 300 # 5分钟检查一次 # 检查socat是否在运行 if ! ps | grep -q "socat TCP6-LISTEN"; then # 重新启动 killall socat 2>/dev/null sleep 1 NAS_IPV6=$(ip -6 neigh show | grep -i "$NAS_MAC" | grep '240e:' | awk '{print $1}' | head -1) if [ -n "$NAS_IPV6" ]; then for port in 80 443 5666 3031; do socat TCP6-LISTEN:${port},fork,reuseaddr,ipv6only=1 TCP6:[${NAS_IPV6}]:${port} & done fi fi done EOF chmod +x /root/nas-monitor
本地启动脚本:
# NAS IPv6转发 + 监控 (sleep 50 && /root/nas-start && sleep 10 && /root/nas-monitor) &
方案4:一行命令解决方案(最简)
直接在本地启动脚本里写:
# NAS IPv6端口转发 (sleep 50 && killall socat 2>/dev/null; sleep 2; NAS_IPV6=$(ip -6 neigh show | grep -i "bc:24:11:39:bc:d9" | grep '240e:' | awk '{print $1}' | head -1); [ -n "$NAS_IPV6" ] && for port in 80 443 5666 3031; do socat TCP6-LISTEN:${port},fork,reuseaddr,ipv6only=1 TCP6:[${NAS_IPV6}]:${port} & done) &
方案5:带IP变化检测的简洁版
cat > /root/nas-auto << 'EOF' #!/bin/sh # 简洁自动转发 NAS_MAC="bc:24:11:39:bc:d9" LAST_IP_FILE="/tmp/nas_last_ip" # 获取当前IP get_current_ip() { ip -6 neigh show | grep -i "$NAS_MAC" | grep '240e:' | awk '{print $1}' | head -1 } # 主循环 while true; do CURRENT_IP=$(get_current_ip) LAST_IP=$(cat "$LAST_IP_FILE" 2>/dev/null) if [ -n "$CURRENT_IP" ] && [ "$CURRENT_IP" != "$LAST_IP" ]; then # IP变化,重启转发 killall socat 2>/dev/null sleep 1 for port in 80 443 5666 3031; do socat TCP6-LISTEN:${port},fork,reuseaddr,ipv6only=1 TCP6:[${CURRENT_IP}]:${port} & done echo "$CURRENT_IP" > "$LAST_IP_FILE" elif [ -z "$CURRENT_IP" ] && [ -f "$LAST_IP_FILE" ]; then # NAS可能离线 rm -f "$LAST_IP_FILE" fi sleep 180 # 3分钟检查一次 done EOF chmod +x /root/nas-auto
本地启动脚本:
# NAS自动转发 (sleep 55 && /root/nas-auto) &
推荐方案:简洁可靠
步骤1:创建简洁脚本
cat > /root/nas-ipv6 << 'EOF' #!/bin/sh # 简洁NAS IPv6转发 killall socat 2>/dev/null sleep 1 IP=$(ip -6 neigh show | grep -i "bc:24:11:39:bc:d9" | grep '240e:' | awk '{print $1}' | head -1) [ -n "$IP" ] && for p in 80 443 5666 3031; do socat TCP6-LISTEN:${p},fork,reuseaddr,ipv6only=1 TCP6:[${IP}]:${p} & done EOF chmod +x /root/nas-ipv6
步骤2:在Web界面本地启动脚本中添加
# NAS IPv6转发 (sleep 50 && /root/nas-ipv6) &
步骤3:创建定时检查(可选)
# 添加到crontab,每天凌晨3点重启一次转发 echo "0 3 * * * /root/nas-ipv6" >> /etc/crontabs/root /etc/init.d/cron restart
验证是否生效
# 重启后检查 sleep 60 echo "检查端口转发:" netstat -tln | grep -E ':(80|443|5666|3031)' echo "" echo "检查进程:" ps | grep socat | grep -v grep # 手动测试 curl -6 -I http://[你的路由器IPv6]:80 2>/dev/null | head -1
这样就没有日志文件占空间了,而且简单可靠。核心就是等待网络就绪后启动转发,不需要复杂的监控和日志。