在网络命名空间中将SQUID代理绑定到VPN


0

我在我的ubuntu服务器上安装了squid代理,它在默认配置下工作。我也有运行openvpn的网络命名空间proxy1(我使用这样的脚本来设置网络命名空间,http://www.naju.se/articles/openvpn-netns.html,然后运行ip netns exec proxy1 openvpn --daemon..

是否可以运行squid,以便它将使用在指定的网络命名空间中运行的vpn连接,因为它是tcp_outgoing_something?

理想情况下,我希望在不同的命名空间中同时拥有多个vpn连接,例如usaNamespace中的usa vpn和germanyNamespace中的germany vpn以及每个定义特定端口,以便myproxyserver:usaPort将使用usa vpn和myproxyserver:germanyPort将使用germany vpn。可能吗?

Answers:


1

如果systemd允许在命名网络命名空间中运行进程,则可以在网络命名空间中运行squid。请参阅https://github.com/systemd/systemd/issues/2741,看起来这是一个无法解决的问题。但是,这里列出了一些解决方法。

或者,您可以在默认网络命名空间中运行squid,并使用tcp_outgoing_address设置为隧道的IP地址到您的网络命名空间。然后使用策略路由(ip rule)通过vpn / network命名空间为来自该IP地址的流量设置默认路由。

实际上你根本不需要网络名称空间; 只要您的VPN并不能取代你的主要默认路由,您可以使用策略路由通过VPN的流量是来自于VPN您的IP地址设置一条缺省路由。如果您每次在VPN上使用相同的IP地址,这种方法很有效。

例如

systemctl启动openvpn

编辑/ etc / iproute2 / rt_tables:

...
101     vpn1 

然后

ip route add default via 192.168.0.1 table vpn1 (# where 192.168.0.1 is the remote gateway IP on the VPN)
ip rule add from 192.168.0.99 lookup vpn1 (# where 192.168.0.99 is the local IP address on the VPN)

编辑/etc/squid3/squid.conf:

...
tcp_outgoing_address 192.168.0.99 [[!]aclname] ...
...

(使用squid acls选择您想通过VPN进行的流量)。

您可以使用与命名网络命名空间相同的技术,这使得它甚至可以在VPN更改的本地和远程IP地址中工作。在这种情况下,您需要在命名空间中设置nat / masquerading,并在默认命名空间和VPN命名空间之间建立隧道。在这种情况下,隧道将具有您分配的静态IP地址,以便解决VPN分配的动态IP地址。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.