在 Linux 服务器上,我有 2 个 NIC:eth0
和eth1
。
服务器有 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 系统而不是代理本身。如果有需要,可以根据具体情况对这个答案进行相应修改。