Ubuntuサーバーにsquidプロキシをインストールしました。デフォルトの構成で動作します。また、openvpnが内部で実行されているネットワーク名前空間proxy1もあります(ネットワーク名前空間の設定にはこのようなスクリプトを使用します http://www.naju.se/articles/openvpn-netns.html 、そして実行ip netns exec proxy1 openvpn --daemon..
)
Tcp_outgoing_somethingとして指定されたネットワーク名前空間で実行されているVPN接続を使用するようにsquidを実行することは可能ですか?
理想的には、異なる名前空間で一度に複数のvpn接続を確立したいと思います。たとえば、usaNamespaceのusavpnとgermanyNamespaceのgermanyvpnで、myproxyserver:usaPortがusa vpnを使用し、myproxyserver:germanyPortがgermanyvpnを使用するように特定のポートを定義します。出来ますか?
Systemdが名前付きネットワーク名前空間でのプロセスの実行を許可している場合、ネットワーク名前空間でsquidを実行することは可能です。 https://github.com/systemd/systemd/issues/2741 を参照してください。これは、修正されないようです。ただし、そこにリストされているいくつかの回避策があります。
または、デフォルトのネットワーク名前空間でsquidを実行し、ネット名前空間へのトンネルのIPアドレスに設定されたtcp_outgoing_addressを使用することもできます。次に、ポリシールーティング(IPルール)を使用して、そのIPアドレスから発信されたトラフィックのvpn /ネットワーク名前空間を介したデフォルトルートを設定します。
実際には、ネットワーク名前空間はまったく必要ありません。 VPNがメインのデフォルトルートをnot置き換えない限り、ポリシールーティングを使用して、VPN経由でのトラフィックのデフォルトルートを設定できます。 VPNのIPアドレス。これは、VPNで毎回同じIPアドレスを使用している場合にうまく機能します。
例えば.
systemctl start 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アドレスを回避できます。