我有一台带有 3 个接口(3 个物理 LAN 卡)的服务器,它们连接到 3 个不同的路由器。每个路由器都有不同的子网,即服务器的 3 个接口属于 3 个不同的子域:
eth0 192.168.1.42 #default interface
eth1 192.168.11.42
eth2 192.168.12.42
我在服务器上以最低配置安装了一个 squid 服务器,它确实可以在 Web 浏览器上正常工作。以下是 squid.conf:
acl all src all
acl lan src 192.168.0.0/16
http_port 3128
access_log /var/log/squid3/access.log squid
hosts_file /etc/hosts
http_access allow lan
http_access deny all
现在,我希望 squid 服务器使用一个特定接口 (eth1) 而不是 eth0 来发送数据包(因为该路由器内部有 openvpn)。经过一番研究,我尝试了以下方法:
tcp_outgoing_address 192.168.11.42
但是,添加此行后,我无法使用 squid 代理从浏览器访问任何地方。经过一番谷歌搜索,有人提到了 iptables 和 ip 路由的 SNAT,但这似乎真的很复杂,我真的不确定在这种情况下我应该设置什么。
我尝试过squid3 -k debug
,但在 cache.log 中只得到类似这样的内容,不确定是否有帮助:
2014/06/26 17:16:42.843| comm_calliocallback: 0
2014/06/26 17:16:42.843| event.cc(225) checkEvents
2014/06/26 17:16:42.853| EventDispatcher::dispatch: Running 'MaintainSwapSpace'
2014/06/26 17:16:42.853| storeMaintainSwapSpace: f=1.00, max_scan=500, max_remove=80
2014/06/26 17:16:42.853| UFSSwapDir::maintain: /var/spool/squid3 removed 0/80 f=1.0000 max_scan=500
2014/06/26 17:16:42.853| event.cc(315) schedule: Adding 'MaintainSwapSpace', in 1.00 seconds
2014/06/26 17:16:42.853| comm_iocallbackpending: 0
2014/06/26 17:16:42.853| comm_calliocallback: 0
2014/06/26 17:16:42.853| comm_calliocallback: 0
2014/06/26 17:16:42.863| comm_iocallbackpending: 0
2014/06/26 17:16:42.863| comm_calliocallback: 0
任何帮助都将非常感激。