V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
violence123456
V2EX  ›  Linux

同一主机内部两网卡互相通信如何强制过物理网卡?

  •  
  •   violence123456 · 2021-11-14 14:58:24 +08:00 via iPhone · 2892 次点击
    这是一个创建于 886 天前的主题,其中的信息可能已经有所发展或是发生改变。
    rt ,一张网卡( ip 为 192.168.3.11 )做网关,监听来自另一个网卡( ip 为 192.168.3.5 ) mac 地址的包,但是由于两网卡处于同一 linux ,可能( 192.168.3.5 )的包经过操作系统的优化,没有过物理网卡就发给了 192.168.3.11 ?导致我部署在 192.168.3.11 上监听 mac 地址( 192.168.3.5 所在网卡)的程序失效,请教大佬如何让“内部两张网卡或者说两 ip 互相通信如何强制过物理网卡”?
    14 条回复    2021-11-15 20:40:09 +08:00
    senghoo
        1
    senghoo  
       2021-11-14 15:13:26 +08:00
    本机内部转发直接在 lo 网卡应该就能听到吧。
    xarthur
        2
    xarthur  
       2021-11-14 16:09:01 +08:00 via iPhone
    写路由表?
    ch2
        3
    ch2  
       2021-11-14 16:55:16 +08:00
    改路由表,route add -host 192.168.3.5 gw 192.168.3.11
    这一句是强行让所有目的地是 192.168.3.5 的包都从 192.168.3.11 走一下
    如果不生效,再改一下 metric
    documentzhangx66
        4
    documentzhangx66  
       2021-11-14 17:50:21 +08:00
    1.如果两张网卡做了 route 路由,那么数据包是直接由 OS 的路由功能进行转发,不会再经过本机程序的 TCP Server 与 UDP Server 的端口监听。

    这种情况下,如果要监听数据包,应该使用抓包工具,比如 Wireshark 、TCPDump 等等。这些工具也可以进行记录或转发数据包,相当于旁路复制。

    2.如果你的目的,是想自己写程序,进行 TCP Server 或 UDP Server 的监听,然后由你自己写的程序进行转发,那么你这种模式,其实是代理了。两张网卡是不能做 OS 级的路由的。
    adoal
        5
    adoal  
       2021-11-14 19:39:32 +08:00 via iPhone
    两张网卡插在同一网段配同段 IP ?你确定真要这样做?这可能是一个 X-Y 问题。
    violence123456
        6
    violence123456  
    OP
       2021-11-14 21:21:38 +08:00 via iPhone
    @ch2 现在我感觉从 3.11 到 3.5 貌似没啥问题,但是 3.5 到 3.11 有问题。体现就是在机器上抓 icmp 报文,只有到 3.5 的 request ,没有 3.5 出来的 response 。(背景是 3.5 的网关设置为 3.11 ,他们写了 raw socket 监听 3.11 的网卡,如果收到给这个网卡的包就做转发处理,之前 3.11 和 3.5 不同机器是没问题的,但是现在同一机器就出问题了)。至于为什么需求这么蛋疼,一时半会讲不清楚。。
    violence123456
        7
    violence123456  
    OP
       2021-11-14 21:22:03 +08:00 via iPhone
    @documentzhangx66 现在我感觉从 3.11 到 3.5 貌似没啥问题,但是 3.5 到 3.11 有问题。体现就是在机器上抓 icmp 报文,只有到 3.5 的 request ,没有 3.5 出来的 response 。(背景是 3.5 的网关设置为 3.11 ,他们写了 raw socket 监听 3.11 的网卡,如果收到给这个网卡的包就做转发处理,之前 3.11 和 3.5 不同机器是没问题的,但是现在同一机器就出问题了)。至于为什么需求这么蛋疼,一时半会讲不清楚。。
    violence123456
        8
    violence123456  
    OP
       2021-11-14 21:22:18 +08:00 via iPhone
    @senghoo 这个值得尝试下,谢谢
    violence123456
        9
    violence123456  
    OP
       2021-11-14 22:51:07 +08:00 via iPhone
    @adoal 需求很蛋疼,一两句话解释不清,可以理解为要在本机做底层协议转换仿真的一些工作
    violence123456
        10
    violence123456  
    OP
       2021-11-15 00:37:50 +08:00 via iPhone
    @adoal 请教大佬有什么更好的建议
    documentzhangx66
        11
    documentzhangx66  
       2021-11-15 02:07:48 +08:00
    @violence123456

    1.既然能看到 icmp 包到 3.5 ,那就继续跟踪下去,到下一个节点去抓包。另外 icmp 以及 udp 抓包都很麻烦,而且有些软硬件还可能有 bug 导致丢包甚至更换端口。

    2.底层协议转换仿真?为啥要转换协议?直接现在 OpenVPN 可以在广域网上组建虚拟私网,然后 gRPC 协议直接通信,感觉转换底层协议没啥应用场景。
    xzysaber
        12
    xzysaber  
       2021-11-15 07:44:41 +08:00
    必须要抓到以太网帧吗?可以尝试下 TAP 。
    adoal
        13
    adoal  
       2021-11-15 20:35:46 +08:00 via iPhone
    @violence123456 讲真,我看不懂你的表达。
    另外我没做过底层网络开发,只是凭运维人员的经验觉得这样配置很扯淡。
    adoal
        14
    adoal  
       2021-11-15 20:40:09 +08:00 via iPhone
    你在三个回答里都说需求蛋疼讲不清楚。
    所以我怀疑这是个 X-Y 问题。
    也许你自己梳理一下原始需求,好好组织一下文字,表达清楚了,也就知道是怎么回事了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5706 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 37ms · UTC 02:10 · PVG 10:10 · LAX 19:10 · JFK 22:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.