Linux 问题请教。局域网内多个不同 ip+相同端口都指向了同一个服务
局域网( 10.10.10.0/24 )内
软路由是中心网关,ip 是 10.10.10.1,有 qbittorrent 服务,监听在 8080 端口。
一台旧的 thinkpad 笔记本跑了一些服务。ip 是 10.10.10.3,也有 qbittorrent 服务,监听在 8080 端口。
fx N1,ip 是 10.10.10.4,通过 docker 安装了 phpmyadmin 。现在这个容器在宿主机上的监听端口也是 8080 。(没想到没想到,fx 是违 jin 词,打出来提示“抱歉,能不能不要在这里讨论这个”)
问题来了,我访问 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
诡异的事情,求助大佬们
软路由( 10.10.10.1 )上
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 –
thinkpad ( 10.10.10.3 )上
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
fx N1 ( 10.10.10.4 )上
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
第 1 条附言 · 2 天前
应该是破案了,是upnp 的锅
20210702175400.png
删掉应该就可以了。不过这条是如何生成的,还是不懂。
第 2 条附言 · 2 天前
楼主还是没说清,抱歉。
20210702180103.png
MiniUPnP 的 ACL 中的一条规则导致了如此滑稽的剧情……
第 3 条附言 · 2 天前
见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端口。
第 4 条附言 · 2 天前
删掉*条附言中框框里的重定向规则就好了
都不用重启防火墙,那边实时删掉了对应的规则
感谢楼里几位大佬相助
ffff 10.10.10.1 TCP 10.10.10.16810 条回复 • 2021-07-02 17:51:52 +08:00
AllenHua 1
AllenHua 2 天前
查了一下 nginx 和 dnsmasq 的配置,也没有发现线索。
其他的话,想不出来运行的程序中可能还有造成这个情况的了
Tink 2
Tink 2 天前 via Android
感觉问题在软路由上,等大佬
AllenHua 3
AllenHua 2 天前
@Tink #2 谢谢大佬回复。
等我晚上回去把 nginx 的配置和 dnsmasq 的配置贴上来。
Nitroethane 4
Nitroethane 2 天前
* 一般情况下以太网中同网段通信的时候流量是不经过路由器的。比如说 10.10.10.3 要发数据包给 10.10.10.4,那么 3 先会发送 ARP 查询的广播包来查询 IP 10.10.10.4 对应的 MAC 地址,然后直接通过 MAC 地址通信(这里描述不是很严谨,数据包只是通过路由器转发,而不会被路由)。(有误请纠正)
* 检查一下软路由的 iptables 。
* 在软路由上用 tcpdump 抓包看看。
weyou 5
weyou 2 天前 via Android
检查软路由 firewall 配置,感觉上是你给.1 添加过端口转发规则并且误把 LAN zone 包含进来了
AllenHua 6
AllenHua 2 天前
@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 同理,也做了绑定
AllenHua 7
AllenHua 2 天前
@AllenHua #6 又有另外一个现象存在。thinkpad 和 n1 上对应服务我换了一个端口(比如从 8080 换成 8082 )就直接可以访问了。就 8080 有这个现象
Nitroethane 8
Nitroethane 2 天前
@AllenHua #6 很明显,大概率就是软路由上的 iptables 配置了转发规则,把目的端口为 8080 的所有数据包都转发给了 10.10.10.1,直接查软路由上 iptables 的配置,尤其是所有表的 FORWARD 链
AllenHua 9
AllenHua 2 天前
@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)
AllenHua 10
AllenHua 2 天前
@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)