大家好,
我需要在特定的服务器上安装less量的虚拟机。 每台机器都应该有自己的代理configuration,但是其中运行的软件没有适当的代理设置function,因此客户机上的代理configuration不是一种select。 我的目标是路由尽可能多的stream量,因为我的外部代理允许,而不仅仅是HTTP。
我正在使用运行在Ubuntu服务器上的VirtualBox,连接到有番茄固件的路由器(把它想象成一个小小的Linux机器)。 虚拟机通过桥接连接到路由器,路由器独立地看到每个虚拟机; 我强烈希望保持这种方式,因为能够通过IP与每个虚拟机进行通信是非常方便的(我可以将其设置为静态)。 我打开使用其他服务器端软件,但我没有看到为什么我目前的设置不起作用的原因。 我想到了几个不同的select,我想知道是否有人有一些洞察哪一个是最好的,或者如果我错过了一个更好的select:
我已经能够在我的Ubuntu服务器(与运行虚拟机相同的服务器)上成功安装并configuration一个squid3代理服务器,这个服务器可以与通过身份validation的代理进行通信。 出于安全原因,我只启用了到代理的本地连接,同一networking中的其他计算机可以使用连接到本地代理,然后将其redirect到外部代理:
Local Machine -> Ubuntu Server (squid3) -> External Proxy
不幸的是,正如我上面提到的,虚拟机没有代理客户端function。 我以为我可以通过自己的Squid服务器路由所有的服务器的stream量,但由于虚拟机具有桥接连接,他们直接与路由器交谈。 为了缓解这个问题,我一直在尝试将VMstream量从路由器redirect回Ubuntu服务器:
Virtual Machine -> Tomato Router -> Ubuntu Server (squid3) -> External Proxy
到目前为止,我对这种方法并没有取得什么成就,因为我迷失在如何redirect所有端口的stream量的细节上,而且从来没有和iptables做过任何工作。 即使我能够将所有stream量redirect到squid3服务器,我也不知道如何能够将单独的代理设置应用到每个虚拟机。 我需要为每个虚拟机build立一个squid3服务器吗? 我很确定,squid3允许我过滤传入的IP,但cache_peer "proxy-host" parent "proxy-port" 0 no-query default login=username:password选项,我正在使用的外部代理似乎performance在全球。
我可以在番茄路由器上安装一个squid3代理服务器,并完成我在路由器本身的第一个选项中描述的所有内容,但是我还没有能够安装代理服务器。 就像我在第一个选项想知道的那样,我是否需要为每个虚拟机使用不同的代理服务器? 布局将非常相似:
Virtual Machine -> Tomato Router (squid3) -> External Proxy
即使我宁愿维护从虚拟机到路由器的桥接连接,也许有一种方法可以通过NAT连接到虚拟机,并使用Ubuntu服务器或番茄路由器上的squid3服务器(如果我能够这行得通)。
哪个选项将是我的问题最好的方法? 有没有更好的方法来处理这个我没有考虑过的事情?
显然我误解了squid无法在客户端而不是全局的情况下处理cache_peer指令,我可以简单地使用cache_peer_access 。 目前,我正试图去select1,直到有人给我一个更好的理由不要。 这是我对/etc/squid3/squid.conf :
编辑:根据build议更新http_port
# acl definitions here acl localnet src 192.168.1.0/24 acl localhost src 127.0.0.1 # Only allow cachemgr access from localhost http_access allow localhost manager http_access deny manager # any client in the local network has access http_access allow localhost http_access allow localnet # And finally deny all other access to this proxy #http_access deny all http_access allow all # test only # external proxy settings http_port 3128 transparent cache_peer XXXX.XXXX.XXXX.XXXX parent 80 0 no-query default login=user:pass # No direct access never_direct allow all # do not forward the IP address forwarded_for off
stream量正在从番茄路由器redirect到我的鱿鱼服务器。 为此,我使用下面的iptables(这些虚拟机仅限于通过DHCP服务器将MAC地址静态绑定到IP的192.168.1.50-192.168.1.100范围内的ips):
PROXY_IP=192.168.1.115 REDIRECT_PORTS=443,80,21,70,210,1025:65535,280,488,591,777 iptables -t mangle -A PREROUTING -p tcp --dport 80 -s $PROXY_IP -j ACCEPT iptables -t mangle -A PREROUTING -m iprange --src-range 192.168.1.50-192.168.1.100 -p tcp -m multiport --dport $REDIRECT_PORTS -j MARK --set-mark 3 iptables -t mangle -A PREROUTING -m iprange --src-range 192.168.1.50-192.168.1.100 -p udp -m multiport --dport $REDIRECT_PORTS -j MARK --set-mark 3 ip rule add fwmark 3 table 2 ip route add default via $PROXY_IP dev br0 table 2
然后回到Ubuntu服务器:
iptables -A PREROUTING -t nat -p tcp -m multiport --dport $REDIRECT_PORTS -j REDIRECT --to 3128 iptables -A PREROUTING -t nat -p udp -m multiport --dport $REDIRECT_PORTS -j REDIRECT --to 3128
我想你的第一个select会好的。
但是您应该configuration虚拟机使用主机服务器作为默认网关,在服务器上禁用icmpredirect,并在其上设置透明的http代理 。
UPD:
如果您的网桥需要iptables,则不需要更改icmpredirect和虚拟机路由。
/etc/sysctl.conf中:
net.ipv4.ip_forward = 1 net.bridge.bridge-nf-call-iptables = 1
要将http请求redirect到你的鱿鱼,iptables:
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128