特定のWebサイトのみのMikrotikおよびVPN


6

日々、私の国のウェブ検閲はその強さを増しています。明らかな解決策はVPNを使用することですが、接続速度が低下し、パブリックVPNサービスの無害性は保証できません。

だから私は次の解決策を考えました:

ルーターは従来の方法でほとんどのWebサイトにアクセスしますが、1つの追加ネットワークインターフェイスのふりをする一定のVPN接続を維持します。検閲されたWebサイトの1つにアクセスすると、ルーターはこの仮想インターフェイスを介してトラフィックを渡します。

これはRouterOSで可能ですか?どうやってするか?

私のルーターはRB2011UiAS-2HnD-IN、RouterOS v 6.30.2です。


実際、この質問はネットワークエンジニアリングサブサイトに適しています。彼らはあなたが望むものが達成できないことを教えてくれます-接続はトンネル化されるかされないかのどちらかです。両方にすることはできません。デスクトップOSから直接、適切なVPNサービスを使用し、必要に応じてオンとオフを切り替えます。
vic

2
@vicたぶん、RouterOSはそれを行うことはできませんが、それが不可能というわけではありません。Linuxポリシールーティングを使用すると、たとえば、IP / CIDR範囲で機能しますが、ほとんどの場合、そこに到達できます。しかし、その後、あなたはあなたが受け取ったDNSレコードを信頼できるかどうかの疑問を持っている...
マイケル・ハンプトン

1
RouterOSはそれをうまく行うことができます。シンプルな1行のiptablesルール。
qasdfdsaq

回答:


8

実行する必要があるコマンドを示すためだけにPPTP VPNを使用すると仮定します。
PPTPの暗号化は長い間壊れているため、より安全なもの(OpenVPNなど)を使用することをお勧めします。使用するVPN /トンネルテクノロジーに関係なく、原則は同じです。

そのため、最初にデフォルトゲートウェイルートを追加せずにVPNを作成します。

/interface pptp-client
add add-default-route=no allow=pap,chap,mschap1,mschap2 connect-to=VPN_SERVER_IP \
dial-on-demand=no disabled=no max-mru=1440 max-mtu=1440 mrru=dis \
name=VPN_NAME password="MY_STRONG_PASSWORD" profile=default-encryption user=USERNAME

次に、VPN経由でデフォルトゲートウェイに新しいルーティングマークを追加して、新しいルーティングテーブルを作成しますvpn。これにより、VPN経由でパケットをルーティングできます。

/ip route add dst-address=0.0.0.0/0 distance=1 gateway=VPN_GATEWAY_IP routing-mark=vpn

VPNがダウンしている場合に発信トラフィックをブロックする場合、次のルートはオプションです。

/ip route add dst-address=0.0.0.0/0 type=unreachable distance=2 routing-mark=vpn

また、VPNインターフェイス経由で送信されるパケットに対して、NATを実行する必要があります。

/ip firewall nat add chain=srcnat out-interface=VPN_NAME action=masquerade

次にmangle、必要な宛先IPに一致するルールを追加し、作成しmark-routingvpnルートテーブルを使用するようにそれらを実行します。

/ip firewall mangle add chain=prerouting dst-address-list=VPN action=mark-routing new-routing-mark=vpn

最後にAddress List、VPN経由でルーティングするIP を使用してファイアウォール上にを作成します。

/ip firewall address-list add list=VPN address=1.1.1.1
/ip firewall address-list add list=VPN address=2.2.2.2
/ip firewall address-list add list=VPN address=3.3.3.3
/ip firewall address-list add list=VPN address=4.4.4.4

VPN経由でルーティングするIPの数だけ、最後のルールを必要な回数繰り返します。

上記のルールは、ルーターの背後の誰がVPNなどにアクセスできるかについてのセキュリティを提供しないことに注意してください。ルールをより安全にするために、ルールに適切なソースIPチェックを追加する必要があります。

また、この方法は、VPNを介してIP全体をルーティングします。特定のポート/プロトコルをVPN経由でルーティングする必要がある場合は、必要なものに一致する追加のマングルルールを作成しmark-routing、それらに対して行うだけです。


1
おかげで、完璧に動作します!NATを追加するとき、私はまた、指定する必要がありました chain=srcnatし、マングルを追加するとき、私は指定する必要がありましたchain=prerouting
pagep

それを指摘してくれてありがとう。回答を更新しました。:)
Cha0s

不思議にaddress list置き換えることができますlayer 7 addressesので、vpnを介して特定のドメイン名の転送要求を言うことができます
mac

これは非常に便利でした。いくつかのリモートIPに対して特定の接続を介したルーティングを指定する必要がありましたが、以前はMangleルールを使用したことがありませんでした。
フェンスポスト

@mac RouterOSの最近のバージョンでは、アドレスリストにドメインを追加でき、同じアドレスリストのアドレスに自動的に解決されます。DNSレコードのTTLに従うため、IPアドレスが変更された場合に自動的に最新の状態に保たれます。L7マッチングは、ちょっとしたPITAであり、非常にリソースを消費します:(
Cha0s

-2

以下は一般的なLinuxの回答です。routerosのUIに適切な機能があるかどうか、およびUIをバイパスしてカーネルのルーティング/ファイアウォール/ nat機能と直接対話できるかどうかはわかりません。

最初に行うことは、VPNソフトウェアをセットアップし、VPNインターフェースを立ち上げることです。VPNをデフォルトゲートウェイにしないようにVPNソフトウェアに指示する必要があります。正確にこれを行う方法は、使用しているVPNソフトウェアによって異なります。

次に、特定のルートをルーティングテーブルに追加して、トラフィックを特定のIPアドレスにVPNに転送できます。

また、ルーターから送信されるパケットの送信元アドレスが送信元のインターフェイスと一致するように、NATが正しく構成されていることを確認する必要があります。これは、「MASQURADE」ターゲットを使用するか、各インターフェイスに個別の「SNAT」ルールを設定することで実行できます。

ブロッキングの正確な性質に応じて、VPNの一部またはすべてのDNSトラフィックを送信することが必要になる場合があります。すべてのDNSトラフィックをVPNに送信するのは簡単です(VPNにルーティングされるIPにDNSサーバー設定を指定するだけです)。(パフォーマンスまたはプライバシーの理由で)DNSクエリの一部のみをVPNに送信したい場合は、要求を分割するために何らかのDNSプロキシが必要になります。

さらに複雑なのは、アクセスしているサイトに安定したIPがない場合です。この場合、応答を監視し、ルートを動的に追加できるDNSプロキシが必要になります。


1
RouterOSは、カーネルまたはiptablesに対して直接何でもできるようにする方法を公開していません。MikroTik RouterOSを管理する唯一の方法は、独自のCLI(Telnet / SSH)、Winbox(デスクトップGUI)、またはAPIを使用することです。
Cha0s
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.