V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
Sponsored by
LinkedIn
2000 个不用坐班的远程好工作在召唤你 · 弹性上班不打卡,工作和生活都能拥有
2000 个不用坐班的全球远程工作,帮助 V2EX 的小伙伴开启全新的工作方式。
Promoted by LinkedIn
AllenHua
V2EX  ›  Linux

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

  •  
  •   AllenHua · 2021-07-02 16:10:38 +08:00 · 1708 次点击
    这是一个创建于 449 天前的主题,其中的信息可能已经有所发展或是发生改变。

    局域网( 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 )上
    [email protected]:~# lsof -i:8080
    COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
    qbittorre 9152 ptpt   54u  IPv6  21614      0t0  TCP *:8080 (LISTEN)
    
    
    [email protected]:~# 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 )上
    [email protected]:~# lsof -i:8080
    
    [email protected]:~# lsof -i:8082
    COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
    qbittorre 864   dk   26u  IPv6  25624      0t0  TCP *:8082 (LISTEN)
    
    [email protected]:~# netstat -anp |grep 8080
    
    [email protected]:~# netstat -anp |grep 8082
    tcp6       0      0 :::8082                 :::*                    LISTEN      864/qbittorrent-nox
    

    • fx N1 ( 10.10.10.4 )上
    [email protected]:/# 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)
    
    [email protected]:/# netstat -anp |grep 8080
    tcp6       0      0 :::8080                 :::*                    LISTEN      5867/docker-proxy
    
    第 1 条附言  ·  2021-07-02 17:56:18 +08:00

    应该是破案了,是upnp 的锅

    20210702175400.png

    删掉应该就可以了。不过这条是如何生成的,还是不懂。

    第 2 条附言  ·  2021-07-02 18:02:13 +08:00

    楼主还是没说清,抱歉。

    20210702180103.png

    MiniUPnP 的 ACL 中的一条规则导致了如此滑稽的剧情……

    第 3 条附言  ·  2021-07-02 18:21:51 +08:00

    见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 条附言  ·  2021-07-02 19:45:48 +08:00

    删掉第一条附言中框框里的重定向规则就好了

    都不用重启防火墙,那边实时删掉了对应的规则

    感谢楼里几位大佬相助

    12 条回复    2021-07-17 20:48:17 +08:00
    AllenHua
        1
    AllenHua  
    OP
       2021-07-02 16:22:38 +08:00
    查了一下 nginx 和 dnsmasq 的配置,也没有发现线索。

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

    等我晚上回去把 nginx 的配置和 dnsmasq 的配置贴上来。
    Nitroethane
        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 抓包看看。
    weyou
        5
    weyou  
       2021-07-02 17:31:13 +08:00 via Android
    检查软路由 firewall 配置,感觉上是你给.1 添加过端口转发规则并且误把 LAN zone 包含进来了
    AllenHua
        6
    AllenHua  
    OP
       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
        7
    AllenHua  
    OP
       2021-07-02 17:37:08 +08:00
    @AllenHua #6 又有另外一个现象存在。thinkpad 和 n1 上对应服务我换了一个端口(比如从 8080 换成 8082 )就直接可以访问了。就 8080 有这个现象
    Nitroethane
        8
    Nitroethane  
       2021-07-02 17:47:25 +08:00
    @AllenHua #6 很明显,大概率就是软路由上的 iptables 配置了转发规则,把目的端口为 8080 的所有数据包都转发给了 10.10.10.1,直接查软路由上 iptables 的配置,尤其是所有表的 FORWARD 链
    AllenHua
        9
    AllenHua  
    OP
       2021-07-02 17:47:29 +08:00
    @weyou #5 刚刚远程访问了下家里 openwrt 软路由,检查了下 firewall 应该没有相关配置。端口转发也是空的

    ![20210702174534.png]( https://cdn.jsdelivr.net/gh/hellodk34/[email protected]/img/20210702174534.png)
    ![20210702174619.png]( https://cdn.jsdelivr.net/gh/hellodk34/[email protected]/img/20210702174619.png)
    ![20210702174654.png]( https://cdn.jsdelivr.net/gh/hellodk34/[email protected]/img/20210702174654.png)
    ![20210702174711.png]( https://cdn.jsdelivr.net/gh/hellodk34/[email protected]/img/20210702174711.png)
    AllenHua
        10
    AllenHua  
    OP
       2021-07-02 17:51:52 +08:00
    qbqbqbqb
        11
    qbqbqbqb  
       2021-07-17 20:46:39 +08:00
    @Nitroethane 你说的是硬路由,内部有单独的交换机模块,同网段流量确实“不经过路由器”。

    楼主用的是软路由,软路由的“交换机”是几个网卡通过 Linux 系统桥接,路由和交换都是软件处理的,而且 Linux 里有一个选项是让 iptables 防火墙可以过滤网桥的数据包。估计楼主的软路由系统中这个设置是默认开启的,所以端口转发( DNAT )规则被应用到了“不经过路由”的数据包上了。
    qbqbqbqb
        12
    qbqbqbqb  
       2021-07-17 20:48:17 +08:00
    @qbqbqbqb 补充:以上指的是多网口( 1 WAN + N LAN )软路由。如果是双网口(1 WAN + 1 LAN)软路由下面接硬交换机就不存在这种情况。
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1544 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 43ms · UTC 17:36 · PVG 01:36 · LAX 10:36 · JFK 13:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.