web-dev-qa-db-ja.com

OpenVPNを介して特定のトラフィックをトンネルする

Ubuntu Serverを使用していますが、トラフィックをフィルタリングして、特定のユーザーまたはグループのトラフィックのみをVPN経由で送信し、残りのトラフィックは標準のインターネット接続経由で送信したいと考えています。これはかなり簡単だと思いますが、設定するのに苦労しています。

以下を使用してVPN接続を正常にセットアップできました。

openvpn --config '/etc/openvpn/Sweden.ovpn' --auth-user-pass '/etc/openvpn/pia.txt' --persist-key --persist-tun --tls-client --remote-cert-tls server --user vpn &

OpenVPNの構成ファイルには次のものが含まれています。

client
dev tun
proto udp
remote sweden.privateinternetaccess.com 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
tls-client
remote-cert-tls server
auth-user-pass
comp-lzo
verb 1
reneg-sec 0

これにより、「tun0」という名前の新しいインターフェイスが作成されます。そのインターフェイスの使用は完全に正常に機能します。

curl -v --interface tun0 icanhazip.com

ただし、eth0インターフェイスを使用しようとすると、接続がタイムアウトします。

curl -v --interface eth0 icanhazip.com

OpenVPN接続を無効にすると、eth0を介したcurl呼び出しが正しく機能します。

Eth0とtun0の両方を機能させることができたら、次のコマンドに似たものを使用して、OpenVPNトンネルを介して特定のグループをルーティングすることを計画していました。

iptables -A OUTPUT -m owner --gid-owner vpn \! -o tun0 -j REJECT

Eth0とtun0の両方を同時に動作させて、特定のユーザー/グループのトラフィックをルーティングし、他のすべてのトラフィックをそのままにしておく方法を知っている人はいますか?

同様の投稿: OpenVPNを介して特定のトラフィックをルーティングする方法は? -ソルバーにネットワークカードが1つしかないため、このソリューションは2つのネットワークカードを使用しているようです。

5
Alex

私が解決方法を知っているあなたのcurl-testに問題があり、解決策を提案できるあなたのスキーム全体に問題があります。

curlはこのように機能しない可能性があります:VPNを開始した後、そのインターフェイス(eth0)にゲートウェイが定義されていません:eth0 NIC IPアドレスであり、LANに到達できますが、インターネット、特にicanhazip.comに到達できるゲートウェイはありません。curlがこのように機能するには、 216.69.252.101(icanhazip.com)への特定のルートがeth0インターフェースを経由することをカーネルに指示する必要があります。

   ip ro add 216.69.252.101 via your_home_routers_IP_address

これで、curl呼び出しが希望どおりに機能します。

VPNを介して、およびVPNの外部の両方で安定した完全なベースで通信する場合、続行する正しい方法は、ポリシーベースのルーティングを使用して2番目のルーティングテーブルをインストールすることです。 David Schwartzによるトピックの適切で簡潔な紹介を見つけることができます 姉妹サイト、ここにあります。 この矛盾が必要な理由は、2つの異なるゲートウェイを備えたシステムを想定しているためです。もちろん、2つの異なるルーティングテーブルがない限り、許可されません。

ここで、目標、つまりを達成するために、ユーザーIDに従って異なるルートに沿ってパケットをルーティングするには、関連するルーティングテーブルを選択する適切なルールを設定する必要があります。したがって、vpnとnovpnという2つのテーブルがあるとします。まず、iptablesmangleテーブルを使用して、ユーザーIDに従ってパケットにマークを付け、次にポリシーのルールを指定する必要があります。前記マークの存在(または不在)に応じたベースのルーティング。

これは次のように機能します。

  iptables -t mangle -I OUTPUT -m owner --uid-owner some-user -j MARK --set-mark 100
  ip rule add fwmark 100 table vpn

vPNを使用する予定のユーザーの場合、および

  iptables -t mangle -I OUTPUT -m owner --uid-owner some-other-user -j MARK --set-mark 300
  ip rule add fwmark 300 table novpn

vPNの外部にルーティングしたい人のために。また、その他、つまりデフォルトのルーティングテーブルを設定するのが常に最善です。お役に立てれば。

2
MariusMatutiae