web-dev-qa-db-ja.com

openvpnクライアントを介して発信トラフィックのみをルーティングするにはどうすればよいですか?

computer_Xからのすべてのトラフィックを、送信トラフィックを除くvpnクライアント経由でルーティングしたいと思います(クライアントにvpnサーバーをインストールする方が簡単な場合もあります)。

ウェブサーバー:80、:443、ssh:22へのリクエストなどの着信接続は、デフォルトでは引き続きmy WANインターフェースを介してルーティングされますが、:80リクエストなどの発信接続はcomputer_XはVPNクライアント経由でルーティングする必要があります。

WAN_INTERFACEから発信されるパケットのデフォルトルートとして常にWAN_GATEWAYを使用するルールを追加しました。見る:

# ip route show table 42
default via WAN_GATEWAY dev eth0 

# ip rule list
0:      from all lookup local 
32765:  from WAN_IP lookup 42
32766:  from all lookup main 
32767:  from all lookup default 

# ip r
default via WAN_GATEWAY dev eth0 onlink 
10.8.0.0/24 via 10.8.0.2 dev tun0 
10.8.0.2 dev tun0  proto kernel  scope link  src 10.8.0.1 
WAN_SUBNET/26 via WAN_GATEWAY dev eth0 
WAN_SUBNET/26 dev eth0  proto kernel  scope link  src WAN_IP 

# ip a
eth0: inet WAN_IP ...
tun0: inet 10.8.0.1 peer 10.8.0.2/32 scope global tun0

ここで、すべての発信トラフィックをtunデバイス経由でルーティングしたいのですが、トンネルをそれ自体にルーティングできないため、ip route add default via 10.8.0.1だけをルーティングすることはできませんか?

しかし多分私はまだデフォルトルートを行うことができます

ip route default via 10.8.0.1

しかし、さらにそのようなVPN接続のための特定のルートを作成しますか?

ip route add table 32 default via WAN_IP
ip rule add from 10.8.0.0/8 table 32

これにより、VPNがそれ自体をルーティングしないようになることを期待していました。

または、10.8.0.0/8を除くすべてのサブネットのすべてのルートを手動で追加する必要がありますか(トンネルがそれ自体をトンネリングしていないことを確認するため)?

ip route add 128.0.0.0/1  via 10.8.0.1
ip route add 64.0.0.0/2 via 10.8.0.1
ip route add 32.0.0.0/3 via 10.8.0.1
ip route add 16.0.0.0/4 via 10.8.0.1
ip route add 12.0.0.0/6 via 10.8.0.1
ip route add 11.0.0.0/7 via 10.8.0.1
ip route add 9.0.0.0/8 via 10.8.0.1
2
fremon

OpenVPNはデフォルトで、デフォルトのルーティングテーブルにOpenVPNサーバーへのルートを追加します。ルーティングの決定は、一致するルールがない場合、最も一致するルールによって行われます。デフォルトゲートウェイが使用されます。 OpenVPNサーバーにはより正確なルールがあるため、デフォルトルートの代わりに使用されます。

デフォルトの構成ですべてのトラフィックをOpenVPN経由でルーティングしてから、特別な場合の例外を構成する必要があります。

独自のルーティング構成で個別の ネットワーク名前空間 を構成し、そこでサービスを実行できます。これには、名前空間に個別のIPアドレスを割り当てるか、名前空間間でNAT構成を使用する必要があります。

個別のネットワーク名前空間の代替手段は、パケットマーキングで ポリシールーティング を使用することです。

iptablesを使用して、送信元ポートからの_10_でパケットをマークします844、および22

_iptables -t mangle -A OUTPUT -p tcp -m multiport --sports 80,443,22 -j MARK --set-mark 10
_

ルーティングテーブルを構成します。デフォルトのルーティングテーブルにOpenVPN構成を使用します(トンネル自体を除く、OpenVPNトンネル経由のすべてのトラフィック)。マークされたトラフィック用に個別のルーティングテーブルを用意します。

_# add new routing table 100 and set its default routing to your default gw
ip route add table 100 default via $DEFAULT_GW

# add rule to use the new table for packets marked 10
ip rule add fwmark 10 table 100

# flush routing cache
ip route flush cache
_
4
sebasth