heiher / natmap

TCP/UDP port mapping for full cone NAT
MIT License
1.38k stars 103 forks source link

一开通知脚本就不能运行了,请求大佬协助 #25

Closed lhbdhr closed 1 year ago

lhbdhr commented 1 year ago

环境

路由器:Xiaomi Mi Router AC2100
固件版本:OpenWrt 22.03.3 r20028-43d71ad93e / LuCI openwrt-22.03 branch git-23.093.57104-ce20b4a
软件版本:luci-app-natmap git-22.356.23645-3d37ac8
         natmap 20230322-1

脚本

#!/bin/sh

# Natter/NATMap
private_port=$4 # Natter: $3; NATMap: $4
public_port=$2 # Natter: $5; NATMap: $2

# qBittorrent.
qb_host="192.168.1.122"
qb_web_port="8080"
qb_username="xxxxx"
qb_password="xxxxxxxxx"

echo "Update qBittorrent listen port to $public_port..."

# Update qBittorrent listen port.
qb_cookie=$(curl -s -i --header "Referer: http://$qb_host:$qb_web_port" --data "username=$qb_username&password=$qb_password" http://$qb_host:$qb_web_port/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_host:$qb_web_port/api/v2/app/setPreferences"

echo "Update iptables..."

# Use iptables to forward traffic.

uci set firewall.@redirect[0].dest_port=$public_port
uci commit firewall
/etc/init.d/firewall reload

echo "Done."

现象

因为我有两台电脑,两个qbittorrent,所以写了两个脚本,只修改了防火墙和qb_host那一行,就不能运行了。

qb_host="192.168.1.123"
...
uci set firewall.@redirect[1].dest_port=$public_port

其中一个能正常运行,脚本也没问题,可以修改端口转发规则和qb监听端口, 但另一个完全运行不起来。连ps w 都不显示, 明明是两个一模一样的脚本,就是不能运行。 是不支持同时给两个任务设置通知脚本吗?

# 运行命令
/usr/bin/natmap -s stun.freeswitch.org -h qq.com -b 13376 -4 -e /usr/lib/natmap/update.sh

# logread有错误提示
Sat Apr  8 03:12:54 2023 daemon.err natmap[17163]: [E] hev_sock_client_tcp src/hev-sock.c:166
Sat Apr  8 03:12:54 2023 daemon.err natmap[17163]: [E] tnsk_run src/hev-tnsk.c:103
Sat Apr  8 03:12:54 2023 daemon.err natmap[17164]: [E] hev_sock_client_tcp src/hev-sock.c:166
Sat Apr  8 03:12:54 2023 daemon.err natmap[17164]: [E] tnsk_run src/hev-tnsk.c:103
Sat Apr  8 03:12:54 2023 daemon.err natmap[17161]: [E] hev_sock_client_tcp src/hev-sock.c:166
Sat Apr  8 03:12:54 2023 daemon.err natmap[17161]: [E] tnsk_run src/hev-tnsk.c:103
Sat Apr  8 03:12:59 2023 daemon.err natmap[17163]: [E] hev_sock_client_tcp src/hev-sock.c:166
Sat Apr  8 03:12:59 2023 daemon.err natmap[17163]: [E] tnsk_run src/hev-tnsk.c:103
Sat Apr  8 03:12:59 2023 daemon.err natmap[17161]: [E] hev_sock_client_tcp src/hev-sock.c:166
Sat Apr  8 03:12:59 2023 daemon.err natmap[17161]: [E] tnsk_run src/hev-tnsk.c:103
Sat Apr  8 03:13:04 2023 daemon.err natmap[17161]: [E] hev_sock_client_tcp src/hev-sock.c:166
Sat Apr  8 03:13:04 2023 daemon.err natmap[17161]: [E] tnsk_run src/hev-tnsk.c:103
Sat Apr  8 03:13:09 2023 daemon.err natmap[17161]: [E] hev_sock_client_tcp src/hev-sock.c:166
Sat Apr  8 03:13:09 2023 daemon.err natmap[17161]: [E] tnsk_run src/hev-tnsk.c:103
Sat Apr  8 03:13:14 2023 daemon.err natmap[17161]: [E] hev_sock_client_tcp src/hev-sock.c:166
Sat Apr  8 03:13:14 2023 daemon.err natmap[17161]: [E] tnsk_run src/hev-tnsk.c:103
Sat Apr  8 03:50:05 2023 daemon.err natmap[18849]: [E] hev_sock_client_tcp src/hev-sock.c:166
Sat Apr  8 03:50:05 2023 daemon.err natmap[18849]: [E] tnsk_run src/hev-tnsk.c:103
Sat Apr  8 03:50:05 2023 daemon.err natmap[18850]: [E] hev_sock_client_tcp src/hev-sock.c:166
Sat Apr  8 03:50:05 2023 daemon.err natmap[18850]: [E] tnsk_run src/hev-tnsk.c:103
Sat Apr  8 03:50:10 2023 daemon.err natmap[18849]: [E] hev_sock_client_tcp src/hev-sock.c:166
Sat Apr  8 03:50:10 2023 daemon.err natmap[18849]: [E] tnsk_run src/hev-tnsk.c:103
heiher commented 1 year ago

natmap -b 参数指定不同的端口,或者直接使用0分配动态端口。(如果不用固定)

lhbdhr commented 1 year ago

emmm,这个我知道啊,没用同一个端口。不设置脚本的话,两个端口都可以正常使用。 昨天还不能运行,今天忽然好了,2个脚本都能用了,什么都没改。

heiher commented 1 year ago

那就是正常现象,我以为你遇到持续输出错误的情况。这个现象的原因是连接关闭后端口不是立即释放的,超时结束前不能再建立相同地址对的连接,程序会自动重试来处理的。

lhbdhr commented 1 year ago

原来是这样啊,随后遇到这样的情况我多等等。 谢谢啦