如果防火墙不支持自动IPv6到IPv4

如果防火墙不支持自动IPv6到IPv4
如果上面的方案不行,使用这个替代方案:

opkg update
opkg install socat

方案2:极简脚本文件 + 启动项

bash
# 创建极简脚本
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

然后在本地启动脚本中添加:

bash
# NAS IPv6转发
(sleep 50 && /root/nas-start) &

方案3:带自动恢复的无日志监控

bash
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

本地启动脚本:

bash
# NAS IPv6转发 + 监控
(sleep 50 && /root/nas-start && sleep 10 && /root/nas-monitor) &

方案4:一行命令解决方案(最简)

直接在本地启动脚本里写:

bash
# 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变化检测的简洁版

bash
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

本地启动脚本:

bash
# NAS自动转发
(sleep 55 && /root/nas-auto) &

推荐方案:简洁可靠

步骤1:创建简洁脚本

bash
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界面本地启动脚本中添加

bash
# NAS IPv6转发
(sleep 50 && /root/nas-ipv6) &

步骤3:创建定时检查(可选)

bash
# 添加到crontab,每天凌晨3点重启一次转发
echo "0 3 * * * /root/nas-ipv6" >> /etc/crontabs/root
/etc/init.d/cron restart

验证是否生效

bash
# 重启后检查
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

这样就没有日志文件占空间了,而且简单可靠。核心就是等待网络就绪后启动转发,不需要复杂的监控和日志。

This entry was posted in 网络相关. Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *