如果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地址。