OpenVPNソフトウェアに基づくVPNネットワークがあります。このVPNネットワークの特定のクライアント(VPNクライアントのIPアドレス)を介してVPNネットワーク上のすべてのネットワークトラフィックをルーティングする必要があります。ここで、宛先IPは、特定の国、つまり基本的なインターネットインターフェイス(PPPoE)構成NAT(仮面舞踏会)です。このすべてのトラフィックに対して、このVPNクライアント(Mikrotikルーター - PPPoEインターフェイス)が所有するパブリックダイナミックIPアドレスを取得する必要があります。だから私はVPNサーバーでiptables mangleルールを作成し、geoip iptablesモジュールを使用しました。
iptables -A PREROUTING -t mangle -i tun0 -m geoip --destination-country COUNTRY_CODE -j MARK --set-mark 1
したがって、特定の国の宛先IPを持つクライアントのすべてのトラフィックにフラグを立てます。次に、これを試してみました。解決策:特定のルーティングテーブルを作成し、デフォルトルートを追加します。ただし、デフォルトルートはこのネットワークのネクストホップだけになります。だからこのコマンドを使うとき:
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
修正する
私はこれを使用しました解決策CountryRoute テーブルにデフォルトのパスを追加するために使用されます。したがって、CountryRouteテーブルの内容は次のようになります。
default via 10.1.1.30 dev tun0
アクティブなiptables mangleルール(上記)と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ルーターには引き続き接続されません。
アップデート2
現在値:
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
アップデート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
アップデート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
アップデート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
Mikrotikトラフィックを受信し、NATを介して実際のMikrotikに再ルーティングするようにネットワークネームスペースを設定するには、10.0.0.0/24をネームスペースに「入れた」後、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 経由で転送し、残りは「一般」/デフォルトルートを通過するにはルールベースのルーティングも必要です。