Linux 问题请教。局域网内多个不同 ip+相同端口都指向了同一个服务

2021-07-02 16:10:38 +08:00
 AllenHua

局域网( 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
2281 次点击
所在节点    Linux
12 条回复
AllenHua
2021-07-02 16:22:38 +08:00
查了一下 nginx 和 dnsmasq 的配置,也没有发现线索。

其他的话,想不出来运行的程序中可能还有造成这个情况的了
Tink
2021-07-02 16:46:45 +08:00
感觉问题在软路由上,等大佬
AllenHua
2021-07-02 16:56:42 +08:00
@Tink #2 谢谢大佬回复。

等我晚上回去把 nginx 的配置和 dnsmasq 的配置贴上来。
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 抓包看看。
weyou
2021-07-02 17:31:13 +08:00
检查软路由 firewall 配置,感觉上是你给.1 添加过端口转发规则并且误把 LAN zone 包含进来了
AllenHua
2021-07-02 17:34:35 +08:00
@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
2021-07-02 17:37:08 +08:00
@AllenHua #6 又有另外一个现象存在。thinkpad 和 n1 上对应服务我换了一个端口(比如从 8080 换成 8082 )就直接可以访问了。就 8080 有这个现象
Nitroethane
2021-07-02 17:47:25 +08:00
@AllenHua #6 很明显,大概率就是软路由上的 iptables 配置了转发规则,把目的端口为 8080 的所有数据包都转发给了 10.10.10.1,直接查软路由上 iptables 的配置,尤其是所有表的 FORWARD 链
AllenHua
2021-07-02 17:47:29 +08:00
@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
2021-07-02 17:51:52 +08:00
qbqbqbqb
2021-07-17 20:46:39 +08:00
@Nitroethane 你说的是硬路由,内部有单独的交换机模块,同网段流量确实“不经过路由器”。

楼主用的是软路由,软路由的“交换机”是几个网卡通过 Linux 系统桥接,路由和交换都是软件处理的,而且 Linux 里有一个选项是让 iptables 防火墙可以过滤网桥的数据包。估计楼主的软路由系统中这个设置是默认开启的,所以端口转发( DNAT )规则被应用到了“不经过路由”的数据包上了。
qbqbqbqb
2021-07-17 20:48:17 +08:00
@qbqbqbqb 补充:以上指的是多网口( 1 WAN + N LAN )软路由。如果是双网口(1 WAN + 1 LAN)软路由下面接硬交换机就不存在这种情况。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/787165

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX