V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
OpenWrt 是一个专门面向嵌入式设备的 Linux 发行版。你可以将 OpenWrt 支持的型号的嵌入式设备,比如各种路由器上的系统,换成一个有更多可能性可以折腾的 Linux 系统。
OpenWrt 官方网站
RayGZJ
V2EX  ›  OpenWrt

op 为旁路由如何通过公网访问指向旁路由下的设备?

  •  
  •   RayGZJ · 2023-05-26 09:39:17 +08:00 · 2850 次点击
    这是一个创建于 582 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我有以下三个设备:

    ikuai 10.0.0.1 主软路由
    openwrt 10.0.0.222 旁路由 网关指向 10.0.0.1
    dietpi ( Linux 主机) ip:10.0.0.6 网关指向 10.0.0.222

    我在 ikuai 上面做了动态解析有公网 ip:xxx.cn
    dietpi 的 520 端口有一个服务,我通过 ikuai 映射到 520 外网端口,但是网关指向 op ,数据经过 openwrt ,我之前在 op 自定义防火墙输入了以下规则:


    iptables -t nat -I PREROUTING -p tcp -m multiport --sports 520 -j RETURN

    之前是生效的,刚用没多久就访问不了显示不可达。
    但是我将 dietpi 重新指向 10.0.0.1 ikuai 是正常的。

    请问访问旁路由下设备的正确的映射方式应该是怎样的?
    请教下各位

    21 条回复    2023-09-27 23:56:50 +08:00
    RayGZJ
        1
    RayGZJ  
    OP
       2023-05-26 09:46:29 +08:00 via iPhone
    其中 op 使用的版本为:

    ImmortalWrt 18.06-k5.4-SNAPSHOT r12339-8b50c1df21 (2023-05-03) / LuCI openwrt-18.06-k5.4 branch (git-22.312.35760-7afcfb2)
    tty228
        2
    tty228  
       2023-05-26 11:59:43 +08:00
    https://github.com/tty228/luci-app-serverchan/blob/d04c70632e251050b65ec6b20c040ff3e6fa5cf9/root/usr/share/serverchan/serverchan#L1323

    除了转发,还需要重写源 IP ,不然会被大多数防火墙当做无效数据包丢弃

    iptables -t nat -I POSTROUTING -p tcp -d 10.0.0.6 --dport 520 -j SNAT --to-source 10.0.0.222
    tty228
        3
    tty228  
       2023-05-26 12:24:49 +08:00
    吃完饭重新看了一下帖子,好像场景和我想象中不一样,不确定上面的规则能不能用
    手上的 OpenWrt 都升级 nftables 了没法测试 →_→
    tty228
        4
    tty228  
       2023-05-26 12:29:53 +08:00
    如果上面的规则不能用的话,大概是要在主路由上添加规则:
    iptables -t nat -A POSTROUTING -p tcp -d 10.0.0.6 --dport 520 -j SNAT --to-source 10.0.0.1

    不过爱快没用过不知道能不能设置相关的选项,不嫌麻烦的话,可以转发 520 端口到 OpenWrt ,再由 OpenWrt 转发到 Linux 主机
    RayGZJ
        5
    RayGZJ  
    OP
       2023-05-26 12:34:06 +08:00 via iPhone
    @tty228 nftables 我那个自带的 dnsmasq 好像不是的 搞不懂是啥原理 是不是出去的数据被丢弃了 进来的时候能找到

    wan —ikuai -op-linux

    出去的时候找不到
    RayGZJ
        6
    RayGZJ  
    OP
       2023-05-26 13:26:12 +08:00 via iPhone
    putaosi
        7
    putaosi  
       2023-05-26 13:51:27 +08:00 via iPhone
    用我的方案,放弃旁路由用法
    mbooyn
        8
    mbooyn  
       2023-05-26 13:55:50 +08:00
    openwrt 做旁路由时,如果需要科学的主机将网关、DNS 指向 Openwrt 旁路由后直接在主路由将需要转发的端口设置为主机无法转发成功,需要先主路由转发到旁路由,旁路由再二次端口转发至主机
    Rysle
        9
    Rysle  
       2023-05-26 14:22:28 +08:00 via Android
    你这些设备都在同一个局域网的话,主路由应该能和网段内的任意设备互访的,不管这些设备的网关设置成什么。因为这时候是通过 ARP 找到对方,而不是网关。
    sexoutsex2011
        10
    sexoutsex2011  
       2023-05-26 14:48:52 +08:00
    @Rysle +1
    我也这个拓扑,端口映射后,外网访问内网设备没问题的
    RayGZJ
        11
    RayGZJ  
    OP
       2023-05-27 00:44:25 +08:00 via iPhone
    @sexoutsex2011 有没有富强呢 ? 不需要在自定义防火墙添加某些端口命令吗?

    我是为了富强才用 openclash ,还有个亚马逊电视棒走的旁路由。
    RayGZJ
        12
    RayGZJ  
    OP
       2023-05-27 00:45:33 +08:00 via iPhone
    @Rysle 好像不行 网关指向 op 的时候就不能通过外网转发访问到
    sexoutsex2011
        13
    sexoutsex2011  
       2023-05-28 22:33:08 +08:00 via iPhone
    @RayGZJ 有富强的,不需要
    RayGZJ
        14
    RayGZJ  
    OP
       2023-05-29 00:06:48 +08:00 via iPhone
    @sexoutsex2011 你是什么版本的 op
    thereone
        15
    thereone  
       2023-06-01 23:33:08 +08:00
    最好的方法是旁路由不要做 NAT ,你上面的问题根因很简单端口映射没做全

    外网访问-->爱快:520--旁路由(NAT)--设备:520
    这里看对于爱快是不知道你的设备的,哪怕是在同一个局域网。
    假设你的爱快直接映射设备的 520 端口,你看路径外部进来是 爱快->设备:520 内部路径 设备:520->旁路由 IP(NAT)旁路由 IP-爱快 看到没有 ip 连接不一致导致你的 TCP 连接建立不起来。原因都在这里。

    正确方式旁路由(NAT)模式
    爱快映射:520-->旁路由:520-->旁路由:520-->映射设备 IP:520
    爱快端口映射 旁路由端口映射
    正确的是有两次端口映射的过程的。

    更好的旁路由方法,最好关闭旁路由的防火墙删除所有区域,防火墙选项全部放行
    这样你的旁路由就真的只做路由功能,唯一会变的就是经过了旁路由你的原始数据的源 mac 地址会变成旁路由的 mac 地址 IP 地址不会变动所以对于爱快来说设备地址是可见的。
    于是上面的端口映射就可以按照正常的思路做 在爱快上面直接映射设备的地址就行了
    thereone
        16
    thereone  
       2023-06-01 23:38:56 +08:00
    @Rysle 互访是可以出爱快就不是了,爱快访问设备可以 arp 局域网内的话。当外部访问进来可以直接找到设备 问题是设备回应的数据包在旁路由会把 设备的 ip 转换成旁路由的 ip 这样源 ip 地址变了爱快能让 tcp 建立连接?爱快找 A A 把东西给 B B 在给爱快,爱快表示不是 A 给的我不收 于是连接就建立不起来了。
    mohumohu
        17
    mohumohu  
       2023-06-03 02:23:31 +08:00
    旁路由做 nat 又多了一层 nat 确实不是很好的办法。如果是为了科学,可以用这个类似的方案,不需要改网关: https://github.com/kkkgo/PaoPaoGateWay
    RayGZJ
        18
    RayGZJ  
    OP
       2023-09-26 11:21:21 +08:00 via iPhone
    @thereone #15 感谢回复,防火墙规则每次都要加不同端口,按照你的说法可否直接在 op 设置端口全映射( fullcone )并删除防火墙所有规则?

    另请教:旁路由可否这样理解,所有在局域网内网关指向旁路由的,都经过 op 的 NAT 转换,而 ikuai 并不能直接访问旁路由下的设备。例如 ikuai 主网 ip 为 10.0.0.1 ,旁路由 10.0.0.6 。

    同局域网内,设备 A 网关指向 ikuai ,设备 B 网关指向 op ,不考虑外网访问的前提下,通过局域网内地址 10.0.0.x ,设备 A 可否访问设备 B 在 op 未设置防火墙规则的端口?
    RayGZJ
        19
    RayGZJ  
    OP
       2023-09-26 11:23:42 +08:00 via iPhone
    @mohumohu #17 感谢回复,到时候搞一个单独 x86 小主机看看。现在感觉使用 Apple TV 做软路由是个不错的选择。x86 还是比较折腾。
    RayGZJ
        20
    RayGZJ  
    OP
       2023-09-27 23:54:30 +08:00 via iPhone
    @mbooyn #8 实际应该是指向旁路有多设备数据将多走一段路,设备-op-ikuai-wan
    RayGZJ
        21
    RayGZJ  
    OP
       2023-09-27 23:56:50 +08:00 via iPhone
    @Rysle #9 这个可能是软路由系统造成的原因吗,ikuai 为主路由。或者我这个拓扑本身主路由 ARP 就寻不到网关指向 op 下的设备 ip 或 mac 地址?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2900 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 08:09 · PVG 16:09 · LAX 00:09 · JFK 03:09
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.