web-dev-qa-db-ja.com

ネットワーク名前空間でSQUIDプロキシをVPNにバインドする

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を使用するように特定のポートを定義します。出来ますか?

1
Kasheftin

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アドレスを回避できます。

1
AlexKing