Tinyproxy:监听并绑定不同的网卡(eth0、eth1)。路由问题

Tinyproxy:监听并绑定不同的网卡(eth0、eth1)。路由问题

在此输入图像描述

在 Linux 服务器上,我有 2 个 NIC:eth0eth1

服务器有 IP:

192.168.2.200/24 on eth0 
192.168.3.200/24 on eth1 

两个网络都有默认子网掩码 ( 255.255.255.0) 和默认网关192.168.x.254

服务器上正在运行具有以下配置的tinyproxy。

Listen 192.168.2.200
Bind 192.168.3.200

这个想法是在互联网上公开公开一个代理,来自该代理的流量eth0应通过其他接口到达互联网上所需的资源eth1

192.168.3.0仅当我将度量值较低的默认路由设置为默认路由时,它才适用于 LAN 。但随后我无法再从路由器上转发端口eth0,因此我只能在 LAN 内使用代理,但无法从外部访问它。

相反,如果我将192.168.2.0度量值较低的默认路由设置为默认路由,我可以从互联网访问代理,但它无法通过接口检索资源eth1

也许我需要路由方面的帮助。

我究竟做错了什么?

提前致谢。

答案1

初步评论:

  • 下面的部分设置失去了网络连接:这应该通过直接控制台访问或从 LAN 连接到代理服务器来完成,而不是从任意远程位置完成

  • 仍然需要与网络配置工具进行适当的集成,此处未提供。


当前设置以及地址(尤其是传出套接字)的使用方式可以利用基于策略的路由达到目标。

  • 从 192.168.2.200 发出的任何内容都使用“左互联网”。
  • 从 192.168.3.200 发出的任何内容都使用“正确的互联网”。
  • 在未绑定的套接字(也称为绑定到 INADDR_ANY)上发出的任何内容都会将路由决策留给主表中的通常默认路由。合理的选择是也使用“正确的互联网”,因为这也是代理服务器的客户端部分,并且由服务器本身使用是有意义的(例如:包更新)。下面的规则和路由是对称的,因此任何其他选择(包括第三个接口上的第三个网关)仍将使代理按预期工作。

  • 通过删除任何默认路由从头开始

    需要控制台或 LAN 访问以避免连接丢失。当然,下面的命令实际上应该使用网络配置工具进行集成,而不是真正刷新任何路由。

    ip route flush default
    
  • 在主表中添加回“默认”默认路由

    ip route add default via 192.168.3.254 dev eth1
    
  • 为双方对称准备备用默认路由

    使用任意路由表 10000(左)和 10001(右)。无需在这些表中重新填充 LAN 路由,主要的将使用默认路由抑制器的规则为这些保留路由表(请参阅下一个项目符号)。

    ip route add default via 192.168.2.254 dev eth0 table 10000
    ip route add default via 192.168.3.254 dev eth1 table 10001
    
  • 添加选择这些路由表的策略规则

    从规则开始,仍然在主路由表中查找所有非默认路由:LAN 路由。默认路由结果在该规则中被抑制suppress_prefixlength 0,从而允许接下来的两个规则选择正确的路由表,从而选择正确的默认路由:

    ip rule add pref 1999 lookup main suppress_prefixlength 0
    
    ip rule add pref 2000 from 192.168.2.200 lookup 10000
    ip rule add pref 2001 from 192.168.3.200 lookup 10001
    

这就是所需要的一切。


只要小代理在 192.168.2.200 上接收流量并从 192.168.3.200 发出流量,两个方向上的每个路由都将按预期运行:

  • 代理的服务器端将在 eth0 上接收并回复客户端

    # ip route get iif eth0 from 192.0.2.2 to 192.168.2.200
    local 192.168.2.200 from 192.0.2.2 dev lo table local 
        cache <local> iif eth0 
    # ip route get from 192.168.2.200 to 192.0.2.2
    192.0.2.2 from 192.168.2.200 via 192.168.2.254 dev eth0 table 10000 uid 0 
        cache 
    
  • 代理的客户端将发送到 eth1 上的服务器并从服务器获取回复

    # ip route get from 192.168.3.200 to 192.0.2.2
    192.0.2.2 from 192.168.3.200 via 192.168.3.254 dev eth1 table 10001 uid 0 
        cache 
    # ip route get iif eth1 from 192.0.2.2 to 192.168.3.200
    local 192.168.3.200 from 192.0.2.2 dev lo table local 
        cache <local> iif eth1 
    
  • 未绑定查询将照常使用主表

    # ip route get to 192.0.2.2
    192.0.2.2 via 192.168.3.254 dev eth1 src 192.168.3.200 uid 0 
        cache 
    
  • 特别案例

    对于右侧 LAN 端 (192.168.3.0/24) 的客户端或左侧 LAN 端 (192.168.2.0/24) 的服务器,可能需要进行可能的调整,包括 LAN 系统而不是代理本身。如果有需要,可以根据具体情况对这个答案进行相应修改。

相关内容