web-dev-qa-db-ja.com

特定のVPNクライアントを介して特定のVPNトラフィックをルーティングする方法は?

OpenVPNソフトウェアに基づくVPNネットワークがあります。宛先IPが特定の国からのVPNネットワーク内のすべてのネットワークトラフィックを、このVPNネットワーク上の1つの特定のクライアント(VPNクライアントIPアドレス)を介してルーティングする必要があります-構成されているMikrotikルーターNAT(MASQUERADE)forメインインターネットインターフェース(PPPoE)。このすべてのトラフィックに対して、このVPNクライアント(Mikrotikルーター-PPPoEインターフェース)が所有するパブリックで動的なIPアドレスを取得する必要があります。VPNサーバーでiptablesマングルルールを作成しました。そして私はgeoipiptablesモジュールを使用します:

iptables -A PREROUTING -t mangle -i tun0 -m geoip --destination-country COUNTRY_CODE -j MARK --set-mark 1

そのため、この特定の国からの宛先IPを持つクライアントからのすべてのトラフィックにマークを付けました。次に、これを使用してみました solution :特定のルートテーブルを作成し、デフォルトルートを追加します。ただし、デフォルトルートは、このネットワークのネクストホップ専用にすることができます。したがって、このコマンドを使用すると、次のようになります。

ip route add default via specific_VPN_client dev tun0 table CountryRoute 

このエラーが発生します:

RTNETLINK answers: Network is unreachable

特定のトラフィックを特定のクライアントにルーティングできますが、ネクストホップにはルーティングできませんか?

私もこのiptablesルールを試しました:

iptables -A PREROUTING -i tun0 -m geoip --destination-country COUNTRY_CODE -j DNAT --to-destination Mikrotik_VPN_IP

ただし、トラフィックはMikrotikルーターで終了します。たぶん、このルーターでこの問題を解決することは可能でしょうか?

OpenVPNサーバー(10.1.1.1)ルートテーブル:

default via PUBLIC_IP_VPN_SERVER dev eth0
10.1.1.0/24 via 10.1.1.2 dev tun0
10.1.1.2 dev tun0  proto kernel  scope link  src 10.1.1.1
PUBLIC_IP_VPN_SERVER/24 dev eth0  proto kernel  scope link  src PUBLIC_IP_VPN_SERVER

[〜#〜]更新[〜#〜]

私はこれを使用しました solution CountryRouteテーブルにデフォルトルートを追加しました。したがって、CountryRouteテーブルには次の内容が含まれます。

default via 10.1.1.30 dev tun0 

アクティブなiptablesマングルルール(上記)とipルートルールがあります:

ip rule show
0:      from all lookup local
32765:  from all fwmark 0x1 lookup CountryRoute
32766:  from all lookup main
32767:  from all lookup default

ただし、マークされたトラフィックは10.1.1.1で終了します-OpenVPNサーバー、Mikrotikルーターへの継続はありません。

UPDATE2

現在の値:

default via PUBLIC_IP_VPN_SERVER dev eth0
10.0.0.0/24 dev veth0  proto kernel  scope link  src 10.0.0.1
10.0.1.0/24 dev veth3  proto kernel  scope link  src 10.0.1.2
10.1.1.0/24 via 10.1.1.30 dev tun0
10.1.1.30 dev tun0  proto kernel  scope link  src 10.1.1.1
PUBLIC_IP_VPN_SERVER/24 dev eth0  proto kernel  scope link  src PUBLIC_IP_VPN_SERVER

tun0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          inet addr:10.1.1.1  P-t-P:10.1.1.30  Mask:255.255.255.255
          inet6 addr: PUBLIC_IP_VPN_SERVER/64 Scope:Global
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:141437 errors:0 dropped:0 overruns:0 frame:0
          TX packets:230785 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          RX bytes:14693683 (14.0 MiB)  TX bytes:240387315 (229.2 MiB)

ip route show table CountryRoute
default via 10.1.1.30 dev tun0

UPDATE 3

ip -4 route show table all
default via 10.0.0.2 dev veth0 table CountryRoute
default via PUBLIC_IP_VPN_SERVER_gateway dev eth0 onlink
10.0.0.0/24 dev veth0 proto kernel scope link src 10.0.0.1
10.0.1.0/24 dev veth3 proto kernel scope link src 10.0.1.2
10.1.1.0/24 via 10.1.1.30 (Mikrotik_VPN_IP) dev tun0
10.1.1.30 dev tun0 proto kernel scope link src 10.1.1.1
PUBLIC_IP_VPN_SERVER/24 dev eth0 proto kernel scope link src PUBLIC_IP_VPN_SERVER
broadcast 10.0.0.0 dev veth0 table local proto kernel scope link src 10.0.0.1
local 10.0.0.1 dev veth0 table local proto kernel scope Host src 10.0.0.1
broadcast 10.0.0.255 dev veth0 table local proto kernel scope link src 10.0.0.1
broadcast 10.0.1.0 dev veth3 table local proto kernel scope link src 10.0.1.2
local 10.0.1.2 dev veth3 table local proto kernel scope Host src 10.0.1.2
broadcast 10.0.1.255 dev veth3 table local proto kernel scope link src 10.0.1.2
local 10.1.1.1 dev tun0 table local proto kernel scope Host src 10.1.1.1
broadcast PUBLIC_IP_VPN_SERVER_networkIP dev eth0 table local proto kernel scope link src PUBLIC_IP_VPN_SERVER
local PUBLIC_IP_VPN_SERVER dev eth0 table local proto kernel scope Host src PUBLIC_IP_VPN_SERVER
broadcast PUBLIC_IP_VPN_SERVER_broadcastIP dev eth0 table local proto kernel scope link src PUBLIC_IP_VPN_SERVER
broadcast 127.0.0.0 dev lo table local proto kernel scope link src 127.0.0.1
local 127.0.0.0/8 dev lo table local proto kernel scope Host src 127.0.0.1
local 127.0.0.1 dev lo table local proto kernel scope Host src 127.0.0.1
broadcast 127.255.255.255 dev lo table local proto kernel scope link src 127.0.0.1

UPDATE 4

ip netns exec Mikrotik ip -4 route show table all
default via 10.0.1.2 dev veth2
10.0.0.0/24 dev veth1 proto kernel scope link src 10.0.0.2
10.0.1.0/24 dev veth2 proto kernel scope link src 10.0.1.1
10.1.1.30 via 10.0.1.2 dev veth2
broadcast 10.0.0.0 dev veth1 table local proto kernel scope link src 10.0.0.2
local 10.0.0.2 dev veth1 table local proto kernel scope Host src 10.0.0.2
broadcast 10.0.0.255 dev veth1 table local proto kernel scope link src 10.0.0.2
broadcast 10.0.1.0 dev veth2 table local proto kernel scope link src 10.0.1.1
local 10.0.1.1 dev veth2 table local proto kernel scope Host src 10.0.1.1
broadcast 10.0.1.255 dev veth2 table local proto kernel scope link src 10.0.1.1

UPDATE 5

# ip netns exec Mikrotik traceroute -I 10.1.1.30
traceroute to 10.1.1.30 (10.1.1.30), 30 Hops max, 60 byte packets
 1  10.0.1.2 (10.0.1.2)  0.053 ms  0.016 ms  0.013 ms
 2  10.1.1.30 (10.1.1.30)  18.868 ms  38.147 ms  98.549 ms

# ip netns exec Mikrotik traceroute 10.1.1.30
traceroute to 10.1.1.30 (10.1.1.30), 30 Hops max, 60 byte packets
 1  10.0.1.2 (10.0.1.2)  0.056 ms  0.019 ms  0.016 ms
 2  10.1.1.30 (10.1.1.30)  19.044 ms  37.808 ms  56.347 ms

# ip netns exec Mikrotik traceroute COUNTRY_PUBLIC_IP_MARKED_TRAFFIC
traceroute to COUNTRY_PUBLIC_IP_MARKED_TRAFFIC (COUNTRY_PUBLIC_IP_MARKED_TRAFFIC), 30 Hops max, 60 byte packets
 1  10.0.1.1 (10.0.1.1)  3052.269 ms !H  3052.212 ms !H  3052.185 ms !H

# ip netns exec Mikrotik traceroute -I COUNTRY_PUBLIC_IP_MARKED_TRAFFIC
traceroute to COUNTRY_PUBLIC_IP_MARKED_TRAFFIC (COUNTRY_PUBLIC_IP_MARKED_TRAFFIC), 30 Hops max, 60 byte packets
 1  * * *
 2  * * *
 3  * * *
 4  * * *
 5  * * *
 6  * 10.0.1.1 (10.0.1.1)  3067.929 ms !H  3067.883 ms !H

ご協力ありがとうございました。

1
Mato

Mikrotikトラフィックを受信するためのネットワーク名前空間を設定し、それをNATで実際のMikrotikにルーティングするには、10.0.0.0/24 "into"を使用して次の方法で行うことができると思います。名前空間と10.0.1.0/24をバックアウトし、Mikrotik_VPN_IP経由でルーティングします

ip netns add Mikrotik
ip link add veth0 type veth peer name veth1
ip link set veth1 netns Mikrotik
ip link add veth2 type veth peer name veth3
ip link set veth2 netns Mikrotik
ifconfig veth0 10.0.0.1/24 up
ifconfig veth3 10.0.1.2/24 up
ip netns exec Mikrotik ifconfig veth1 10.0.0.2/24 up
ip netns exec Mikrotik ifconfig veth2 10.0.1.1/24 up
ip netns exec Mikrotik iptables -t nat -A POSTROUTING -o veth2 -j MASQUERADE
ip netns exec Mikrotik ip route add Mikrotik_VPN_IP via 10.0.1.2
ip netns exec Mikrotik ip route add default via Mikrotik_VPN_IP dev veth2 onlink
ip netns exec Mikrotik iptables -A PREROUTING -t mangle -j MARK --set-mark 0

これで、10.0.0.2経由でルーティングすることにより、Microtekルーターとの間のトラフィックパスが得られます。選択したトラフィックを10.0.0.2経由で渡し、残りを「通常」/デフォルトルート経由で渡すには、ルールベースのルーティングも必要です。

1