总
Lucky配置STUN内网穿透
STUN穿透得到外网端口A,外网端口A转发到机器的40000端口
iptables将40000端口转发到内网端口A
BT监听内网端口A
20250923182442
#!/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