さて、「恋に落ちました」について-これは誇張です。 むしろ、「共存できた」。
ご存知のように、2018年4月16日から、Roskomnadzorの非常に広範なストロークにより、ネットワーク上のリソースへのアクセスがブロックされ、「ドメイン名、インターネット上のサイトページポインター、およびインターネット上のサイトを識別できるネットワークアドレスの統合登録ロシア連邦で配布が禁止されている情報を含む「(本文では-ただの登録簿)/ 10。 その結果、ロシア連邦およびビジネスの市民は、彼らが必要とする絶対に合法的な資源へのアクセスを失い、苦しんでいます。
Habrの記事の1つへのコメントで、回避策を設定するために被害者を支援する準備ができていると言った後、何人かの人々が私にそのような助けを求めました。 すべてが彼らのために働いたとき、彼らの一人は記事でテクニックを説明することを勧めました。 熟考した後、私はサイトの沈黙を破り、プロジェクトとFacebookの投稿の間に何かを書くことを試みました。 ハブラポスト。 結果はあなたの前にあります。
免責事項
ロシア連邦の領土で禁止されている情報へのアクセスをバイパスする方法を公開することはあまり合法ではないため、この記事の目的は、ロシア連邦の領土で許可されているリソースへのアクセスを自動化できる方法について話しますが、直接アクセスできない誰かの行動のためですプロバイダーを通じて。 また、記事からのアクションの結果として取得された他のリソースへのアクセスは残念な副作用であり、記事の目的は決してありません。
また、私は主に職業、職業、ライフパスによってネットワークアーキテクトであるため、プログラミングとLinuxは私の強みではありません。 したがって、もちろん、スクリプトをより適切に記述したり、VPSのセキュリティ問題をより深く処理したりすることができます。 あなたの提案は感謝されて受け入れられます。もしそれらが十分に詳細であれば、喜んでそれらを記事に加えます。
TL; DR
レジストリコピーとBGPプロトコルを使用して、既存のトンネルを介したリソースへのアクセスを自動化します。 目標は、ブロックされたリソースに宛てられたすべてのトラフィックをトンネルに削除することです。 最小限の説明。主にステップごとの指示。
これには何が必要ですか
残念ながら、この投稿は万人向けではありません。 この手法を使用するには、いくつかの要素を一緒に収集する必要があります。
- ロックフィールドの外側のどこかにLinuxサーバーが必要です。 または、少なくともそのようなサーバーを取得したいという願望-利点は、今では年間9ドルから、場合によってはそれよりも低いことです。 この方法は、個別のVPNトンネルがある場合にも適しています。その場合、サーバーはブロッキングフィールド内に配置することもできます。
- あなたのルーターは、
- 好きなVPNクライアント(OpenVPNが好きですが、PPTP、L2TP、GRE + IPSec、およびトンネルインターフェイスを作成するその他のオプションを使用できます)。
- BGPv4プロトコル。 つまり、SOHOの場合は、Mikrotik、またはOpenWRT / LEDE / QuaggaまたはBirdをインストールできる同様のカスタムファームウェアを備えた任意のルーターを使用できます。 PCルーターの使用も禁止されていません。 企業の場合は、境界ルーターのドキュメントでBGPサポートを参照してください。
- LinuxおよびBGPを含むネットワークに精通している必要があります。 または、少なくともそのようなアイデアを取得したい。 今回は広大なものを受け入れる準備ができていないので、あなた自身のためにいくつかの不可解な瞬間を勉強する必要があります。 しかし、もちろん、私はコメントの特定の質問に答えます、そして、答える唯一のものである可能性が低いので、尋ねることをheしないでください。
例で使用されているもの
- レジストリのコピー-https://github.com/zapret-info/ziから
- VPS-Ubuntu 16.04
- ルーティングサービス- 鳥1.6.3
- ルーター-Mikrotik hAP ac
- 作業フォルダー-ルートから作業するため、ほとんどすべてがルートホームフォルダーに配置されます。 したがって:
- / root / blacklist-コンパイルスクリプトを含む作業フォルダー
- / root / zi-githubを使用したレジストリのコピー
- / etc / bird-標準の鳥サービス設定フォルダー
- VPSの外部IPアドレスは、ルーティングサーバーおよびトンネル終端ポイントとして194.165.22.146、ASN 64998として受け入れます。 ルーターの外部IPアドレスは81.177.103.94、ASN 64999です。
- トンネル内のIPアドレスは、それぞれ172.30.1.1と172.30.1.2です。
もちろん、他のルーター、オペレーティングシステム、ソフトウェア製品を使用して、ソリューションをロジックに合わせて調整することもできます。
簡単に-ソリューションのロジック
- 準備作業
- VPSを取得
- ルーターからVPSへのトンネルを上げる
- レジストリのコピーを受け取り、定期的に更新します
- ルーティングサービスをインストールして構成する
- レジストリに基づいて、ルーティングサービスの静的ルートのリストを作成します
- ルーターをサービスに接続し、トンネルを介したすべてのトラフィックの送信を構成します。
実際に決定
準備活動
広大なネットワークには、非常にリーズナブルなお金でVPSを提供するサービスが多数あります。 これまでのところ、$ 9 /年のオプションを見つけて使用しましたが、実際に気にしなくても、隅々に1E /月のオプションがたくさんあります。 VPSを選択する問題は、この記事の範囲をはるかに超えているため、誰かがこれについて理解していない場合は、コメントで質問してください。
ルーティングサービスだけでなく、そのトンネルの終端にもVPSを使用する場合は、このトンネルを上げて、ほぼ明確にNATを構成する必要があります。 ネットワークにはこれらのアクションに関する多数の指示がありますが、ここでは繰り返しません。 このようなトンネルの主な要件は、VPSへのトンネルをサポートする別のインターフェイスをルーター上に作成する必要があることです。 使用されるほとんどのVPNテクノロジーはこの要件を満たしています。たとえば、tunモードのOpenVPNは完璧です。
レジストリのコピーを取得する
ジャブライルが言ったように、「私たちを邪魔する人は私たちを助けてくれるでしょう。」 ILVは禁止されたリソースのレジストリを作成しているため、このレジストリを使用して問題を解決しないのは罪です。 githubからレジストリのコピーを受け取ります。
Linuxサーバーに移動し、ルートコンテキスト( sudo su- )に移動して、gitがまだインストールされていない場合はインストールします。
apt install git
.
cd ~ && git clone --depth=1 https://github.com/zapret-info/z-i
( 20 , ). crontab -e :
*/20 * * * * cd ~/z-i && git pull && git gc
, . /root/z-i/.git/hooks/post-merge :
#!/usr/bin/env bash changed_files="$(git diff-tree -r --name-only --no-commit-id ORIG_HEAD HEAD)" check_run() { echo "$changed_files" | grep --quiet "$1" && eval "$2" } check_run dump.csv "/root/blacklist/makebgp"
chmod +x /root/z-i/.git/hooks/post-merge
makebgp, , .
bird. , Ubuntu bird , PPA .
add-apt-repository ppa:cz.nic-labs/bird apt update apt install bird
bird IPv6 — .
systemctl stop bird6 systemctl disable bird6
bird (/etc/bird/bird.conf), ( , )
log syslog all; router id 172.30.1.1; protocol kernel { scan time 60; import none; # export all; # Actually insert routes into the kernel routing table } protocol device { scan time 60; } protocol direct { interface "venet*", "tun*"; # Restrict network interfaces it works with } protocol static static_bgp { import all; include "pfxlist.txt"; #include "iplist.txt"; } protocol bgp OurRouter { description "Our Router"; neighbor 81.177.103.94 as 64999; import none; export where proto = "static_bgp"; local as 64998; passive off; multihop; }
router id — , IPv4-, . 32- IPv4-, IPv4- ( VPS).
protocol direct , . , . , IPv4-.
protocol static — , ip- ( , , /32) . — . , ip- , — . , 78 , ip- — 85898. , ip — . 85 .
protocol bgp, , bgp- . ip- — ( ), 64998 64999 — . 16- , AS , RFC6996 — 64512-65534 ( 32- ASN, ). eBGP , .
, IP- , private (RFC1918) shared (RFC6598) , , .
, — protocol bgp IP- . , . , IP- .
, , ip-, protocol static. , /root/blacklist/makebgp
#!/bin/bash cut -d";" -f1 /root/z-i/dump.csv| tr '|' '\n' | tr -d ' ' > /root/blacklist/tmpaddr.txt cat /root/blacklist/tmpaddr.txt | grep / | sed 's_.*_route & reject;_' > /etc/bird/pfxlist.txt cat /root/blacklist/tmpaddr.txt | sort | uniq | grep -Eo "([0-9]{1,3}[\.]){3}[0-9]{1,3}" | sed 's_.*_route &/32 reject;_' > /etc/bird/iplist.txt /etc/init.d/bird reload logger 'bgp list compiled'
chmod +x /root/blacklist/makebgp
/etc/bird.
, bird , , . , :
systemctl start bird birdc show route
80 ( , , ) :
54.160.0.0/12 unreachable [static_bgp 2018-04-19] * (200)
birdc show protocol
. (. ), OurRouter start ( Connect Active), up ( Established). , :
BIRD 1.6.3 ready. name proto table state since info kernel1 Kernel master up 2018-04-19 device1 Device master up 2018-04-19 static_bgp Static master up 2018-04-19 direct1 Direct master up 2018-04-19 RXXXXXx1 BGP master up 13:10:22 Established RXXXXXx2 BGP master up 2018-04-24 Established RXXXXXx3 BGP master start 2018-04-22 Connect Socket: Connection timed out RXXXXXx4 BGP master up 2018-04-24 Established RXXXXXx5 BGP master start 2018-04-24 Passive
, , , — . , — .
. — BGP- nexthop, ( p2p ) ip- , ethernet).
, Mikrotik RouterOS
/routing bgp instance set default as=64999 ignore-as-path-len=yes router-id=172.30.1.2 /routing bgp peer add in-filter=dynamic-in multihop=yes name=VPS remote-address=194.165.22.146 remote-as=64998 ttl=default /routing filter add action=accept chain=dynamic-in protocol=bgp comment="Set nexthop" set-in-nexthop=172.30.1.1
Cisco IOS —
router bgp 64999 neighbor 194.165.22.146 remote-as 64998 neighbor 194.165.22.146 route-map BGP_NEXT_HOP in neighbor 194.165.22.146 ebgp-multihop 250 ! route-map BGP_NEXT_HOP permit 10 set ip next-hop 172.30.1.1
, BGP-, , nexthop , . — .
, — , .
, BGP-, , , bird , ip-,
systemctl reload bird
, 85 . , :)
, IP- .
, , . , ip- perl python. perl, Net::CIDR::Lite, 85 60 ( ), , , , .
ISO/OSI, /, , . github nxdomain.txt, , , SwitchyOmega Chrome.
, , , - (, - ). , , .
— , .
UPD2. , , , VPS . .
— , VPN- (, ). , . , " OpenVPN" , VPS, " OpenVPN" — , , .
UPD3. Unsacrificed , dump.csv bird ip-. " " . https://habr.com/post/354282/#comment_10782712
UPD4. ( ):
1) systemctl reload bird birdc configure.
2) Mikrotik IP /routing filter add action=accept chain=dynamic-in protocol=bgp comment="Set nexthop" set-in-nexthop=172.30.1.1 , /routing filter add action=accept chain=dynamic-in protocol=bgp comment="Set nexthop" set-in-nexthop-direct=< >
UPD5. https://antifilter.download, ip-. . "route… reject".
, , .