Linux 问题请教。局域网内多个不同 ip+相同端口都指向了同一个服务 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
AllenHua
V2EX    Linux

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

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

    局域网( 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 条附言    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  
    PRO
       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/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  
    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     Solana     2329 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 30ms UTC 10:41 PVG 18:41 LAX 02:41 JFK 05:41
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86