BT内网穿透

  1. 所求所有用户执行/vol1/1000/py/proxy.sh时都不需要输入sudo密码,但是自动是管理权执行

Lucky配置STUN内网穿透

STUN穿透得到外网端口A,外网端口A转发到机器的40000端口

iptables将40000端口转发到内网端口A

BT监听内网端口A

2025092318244220250923182442

#!/bin/bash

# 用法: ./port_forward.sh <目标端口>
if [ $# -ne 1 ]; then
    echo "Usage: $0 <target_port>"
    exit 1
fi

TARGET_PORT=$1
SOURCE_PORT=40000

public_port=$1

# qBittorrent.
qb_username=""
qb_password=""
qb_addr=""

# Update qBittorrent listen port.
qb_cookie=$(curl -s -i --header "Referer: http://$qb_addr" --data "username=$qb_username&password=$qb_password" http://$qb_addr/api/v2/auth/login | grep -i set-cookie | cut -c13-48)
curl -X POST -b "$qb_cookie" -d 'json={"listen_port":"'$public_port'"}' "http://$qb_addr/api/v2/app/setPreferences"

# 清除已有的 40000 转发规则(如果存在)
EXISTING_RULE=$(sudo iptables -t nat -S PREROUTING | grep "dport $SOURCE_PORT" | grep "DNAT")
if [ ! -z "$EXISTING_RULE" ]; then
    # 删除规则
    sudo iptables -t nat -D PREROUTING $(echo "$EXISTING_RULE" | sed 's/^-A //')
fi

# 添加新的转发规则
sudo iptables -t nat -A PREROUTING -p tcp --dport $SOURCE_PORT -j REDIRECT --to-port $TARGET_PORT

echo "Port forwarding set: $SOURCE_PORT -> $TARGET_PORT"

所求所有用户执行/vol1/1000/py/proxy.sh时都不需要输入sudo密码,但是自动是管理权执行

sudo visudo

ALL ALL=(ALL) NOPASSWD: /vol1/1000/py/proxy.sh