局域网( 10.10.10.0/24 )内
问题来了,我访问 10.10.10.1:8080 、10.10.10.3:8080 、10.10.10.4:8080 都指向了 10.10.10.1:8080 这个页面,登录进去也是软路由上 qbit 做种的数据???这是为什么啊……
后来我把 thinkpad 机器上的 qbittorrent 监听端口改成了 8082,访问 10.10.10.3:8082 终于成功(是这台机器上的做种数据了)。但是访问 10.10.10.3:8080 依然成功,且指向 10.10.10.1:8080
诡异的事情,求助大佬们
root@dkRouter:~# lsof -i:8080
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
qbittorre 9152 ptpt 54u IPv6 21614 0t0 TCP *:8080 (LISTEN)
root@dkRouter:~# netstat -anp |grep 8080
tcp 0 0 :::8080 :::* LISTEN 9152/qbittorrent-no
tcp 0 0 ::ffff:10.10.10.1:8080 ::ffff:10.10.10.168:56367 ESTABLISHED 9152/qbittorrent-no
tcp 0 0 ::ffff:10.10.10.1:8080 ::ffff:10.10.10.168:56363 TIME_WAIT -
tcp 0 0 ::ffff:10.10.10.1:8080 ::ffff:10.10.10.168:56374 ESTABLISHED 9152/qbittorrent-no
tcp 0 0 ::ffff:10.10.10.1:8080 ::ffff:10.10.10.168:56330 ESTABLISHED 9152/qbittorrent-no
tcp 0 0 ::ffff:10.10.10.1:8080 ::ffff:10.10.10.168:56355 ESTABLISHED 9152/qbittorrent-no
tcp 0 0 ::ffff:10.10.10.1:8080 ::ffff:10.10.10.168:56361 TIME_WAIT -
tcp 0 0 ::ffff:10.10.10.1:8080 ::ffff:10.10.10.168:56359 TIME_WAIT -
root@dk-tpt400:~# lsof -i:8080
root@dk-tpt400:~# lsof -i:8082
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
qbittorre 864 dk 26u IPv6 25624 0t0 TCP *:8082 (LISTEN)
root@dk-tpt400:~# netstat -anp |grep 8080
root@dk-tpt400:~# netstat -anp |grep 8082
tcp6 0 0 :::8082 :::* LISTEN 864/qbittorrent-nox
root@n1-armbian:/# lsof -i:8080
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
docker-pr 5867 root 4u IPv6 885545 0t0 TCP *:http-alt (LISTEN)
root@n1-armbian:/# netstat -anp |grep 8080
tcp6 0 0 :::8080 :::* LISTEN 5867/docker-proxy
应该是破案了,是upnp 的锅
删掉应该就可以了。不过这条是如何生成的,还是不懂。
楼主还是没说清,抱歉。
MiniUPnP 的 ACL 中的一条规则导致了如此滑稽的剧情……
见10楼第二张图片,miniupnpd链
tcp协议,dpt:8080 to 10.10.10.1:8080
ps: dpt 应该是 destination port 的意思 (有误请大家指正)
那局域网内如果有主机开机了获取到了ip地址,我访问 10.10.10.x:8080 都会转发到10.10.10.1:8080 且不论 10.10.10.x 这台主机是否有在监听8080端口。
删掉第一条附言中框框里的重定向规则就好了
都不用重启防火墙,那边实时删掉了对应的规则
感谢楼里几位大佬相助
1
AllenHua OP 查了一下 nginx 和 dnsmasq 的配置,也没有发现线索。
其他的话,想不出来运行的程序中可能还有造成这个情况的了 |
2
Tink 2021-07-02 16:46:45 +08:00 via Android
感觉问题在软路由上,等大佬
|
4
Nitroethane 2021-07-02 17:18:09 +08:00
* 一般情况下以太网中同网段通信的时候流量是不经过路由器的。比如说 10.10.10.3 要发数据包给 10.10.10.4,那么 3 先会发送 ARP 查询的广播包来查询 IP 10.10.10.4 对应的 MAC 地址,然后直接通过 MAC 地址通信(这里描述不是很严谨,数据包只是通过路由器转发,而不会被路由)。(有误请纠正)
* 检查一下软路由的 iptables 。 * 在软路由上用 tcpdump 抓包看看。 |
5
weyou 2021-07-02 17:31:13 +08:00 via Android
检查软路由 firewall 配置,感觉上是你给.1 添加过端口转发规则并且误把 LAN zone 包含进来了
|
6
AllenHua OP @Nitroethane #4 感谢指点
关于第一点,应该是这样。计算机网络中学到的就是,10.10.10.0/24 和 10.10.11.0/24 是两个不同的 network,不同的网络才会使路由器的路由功能参与到其中工作。而同网段的设备间通过 arp 地址解析协议,ip 和 mac 地址之间进行转换,只会用到路由器的 package 转发功能。 第二点和第三点不是很会用。tcpdump 用过一次 哈哈。总之非常醍醐灌顶的回复。感谢 --- 就第一点, 我现在 macbook ( 10.10.10.168 ) 访问 N1 的 phpmyadmin 服务( 10.10.10.4:8080 ),首先问局域网内谁拥有 10.10.10.4 这个 ip 地址,然后就找对应 mac 地址……难道就找错了人? 我忘了提及一点,10.10.10.3 和 10.10.10.4 这两台机器在 openwrt 中设置了静态地址绑定。 ``` # cat /etc/config/dhcp config dnsmasq option domainneeded '1' option localise_queries '1' option rebind_protection '1' option rebind_localhost '1' option local '/lan/' option domain 'lan' option expandhosts '1' option authoritative '1' option readethers '1' option leasefile '/tmp/dhcp.leases' option nonwildcard '1' option localservice '1' option filter_aaaa '1' option port '53' list server '127.0.0.1#53' option resolvfile '/tmp/resolv.conf.auto' config dhcp 'lan' option interface 'lan' option start '100' option limit '150' option leasetime '12h' option ra_slaac '1' list ra_flags 'managed-config' list ra_flags 'other-config' config dhcp 'wan' option interface 'wan' option ignore '1' config odhcpd 'odhcpd' option maindhcp '0' option leasefile '/tmp/hosts/odhcpd' option leasetrigger '/usr/sbin/odhcpd-update' option loglevel '4' config srvhost option srv '_vlmcs._tcp' option target 'dkRouter' option port '1688' option class '0' option weight '100' config host option name 't400' option dns '1' option mac '00:1c:25:a2:54:c6' option ip '10.10.10.3' option leasetime 'infinite' ``` config host option name 't400' option dns '1' option mac '00:1c:25:a2:54:c6' option ip '10.10.10.3' option leasetime 'infinite' 可以看到 mac 地址 00:1c:25:a2:54:c6 和 ip 地址 10.10.10.3 做了永久绑定,leasetime 是 infinite 。 fx n1 同理,也做了绑定 |
7
AllenHua OP @AllenHua #6 又有另外一个现象存在。thinkpad 和 n1 上对应服务我换了一个端口(比如从 8080 换成 8082 )就直接可以访问了。就 8080 有这个现象
|
8
Nitroethane 2021-07-02 17:47:25 +08:00
@AllenHua #6 很明显,大概率就是软路由上的 iptables 配置了转发规则,把目的端口为 8080 的所有数据包都转发给了 10.10.10.1,直接查软路由上 iptables 的配置,尤其是所有表的 FORWARD 链
|
9
AllenHua OP @weyou #5 刚刚远程访问了下家里 openwrt 软路由,检查了下 firewall 应该没有相关配置。端口转发也是空的
![20210702174534.png]( https://cdn.jsdelivr.net/gh/hellodk34/image@main/img/20210702174534.png) ![20210702174619.png]( https://cdn.jsdelivr.net/gh/hellodk34/image@main/img/20210702174619.png) ![20210702174654.png]( https://cdn.jsdelivr.net/gh/hellodk34/image@main/img/20210702174654.png) ![20210702174711.png]( https://cdn.jsdelivr.net/gh/hellodk34/image@main/img/20210702174711.png) |
10
AllenHua OP @Nitroethane #8
很惊喜,防火墙页面搜到了这两条 ![20210702175120.png]( https://cdn.jsdelivr.net/gh/hellodk34/image@main/img/20210702175120.png) ![20210702175140.png]( https://cdn.jsdelivr.net/gh/hellodk34/image@main/img/20210702175140.png) |
11
qbqbqbqb 2021-07-17 20:46:39 +08:00
@Nitroethane 你说的是硬路由,内部有单独的交换机模块,同网段流量确实“不经过路由器”。
楼主用的是软路由,软路由的“交换机”是几个网卡通过 Linux 系统桥接,路由和交换都是软件处理的,而且 Linux 里有一个选项是让 iptables 防火墙可以过滤网桥的数据包。估计楼主的软路由系统中这个设置是默认开启的,所以端口转发( DNAT )规则被应用到了“不经过路由”的数据包上了。 |