OpenWRT + OpenVPN:ポイントバイパスロック

インターネットで常に仕事をしている人として、私はこれらのリソースのコンテンツに関係なく、すべてのリソースへの完全かつ妨げられないアクセスに慣れています。リソースの一部を提供するという事実のために(私はホスティングプロバイダーで働いています)、そのようなアクセスが必要です。

ロックを回避することはそれほど難しくありません;多くの方法があります。 最も一般的で安定しているのはVPNです。 しかし、VPNには大きな欠点があります。速度の低下、pingの過大評価などです。 これに基づいて、ロックをバイパスするためだけにVPNを使用し、プロバイダーを介して他のリソースにアクセスするという考えがありました。

TP-Link WR841Nルーターですべてを実行して、正常に動作しているコンピューターだけでなく、すべてのネットワークデバイスにインターネットへのアクセスを妨げないようにします。

まず、OpenVPNサーバーを上げるか、VPNプロバイダーのサービスを使用する必要があります。 独自のサーバーを作成する場合は、 OpenVPN Access Serverを使用することをお勧めします 。 これを使用すると、簡単かつ迅速に展開でき、Webインターフェイスも備えています。 パッケージをインストールし、openvpnアカウントのパスワードを設定するだけです。

OpenWRT用にルーターをフラッシュする方法については説明しません。既にそのような記事があります。 さらに言えば、TP-Link WR841NのOpenWRTファームウェアにOpenVPNがないという問題に対する解決策さえあります- この記事 。 この記事の唯一のことは、initスクリプトを少し調整する必要があったことです。 自動実行に問題があり、また、スクリプトが各開始時にOpenVPNディストリビューションをダウンロードせず、最初にのみダウンロードするという条件も追加しました。

ここにスクリプトがあります
#!/bin/sh /etc/rc.common START=99 start() { local TMPPATH=/tmp/openvpn if [ ! -f "${TMPPATH}/usr/sbin/openvpn" ]; then sleep 60; [ ! -d ${TMPPATH} ] && mkdir ${TMPPATH} cd ${TMPPATH} opkg update || exit 1 tar xzf $(opkg download libopenssl | grep Downloaded | cut -d\ -f4 | sed '$s/.$//') tar xzf data.tar.gz tar xzf $(opkg download openvpn-openssl | grep Downloaded | cut -d\ -f4 | sed '$s/.$//') tar xzf data.tar.gz rm -f pkg.tar.gz data.tar.gz control.tar.gz debian-binary getopenvpn.sh for i in $(ls ${TMPPATH}/usr/lib) do [ ! -f /usr/lib/$i ] && ln -s /tmp/openvpn/usr/lib/$i /usr/lib/$i done fi ${TMPPATH}/usr/sbin/openvpn --writepid /tmp/ovpn_ciberterminal.pid --daemon --cd /etc/openvpn --config my.conf } stop() { PIDOF=$(ps | egrep openvpn | egrep -v grep | awk '{print $1}') kill ${PIDOF} } 

そこで、OpenWRTとOpenVPNファームウェアがインストールされたルーターがあるとしましょう。 OpenVPN接続構成ファイルを編集します。このファイルは/etc/openvpn/my.cnfにあります。 次のパラメーターを追加します。

 route-noexec #     default route. auth-user-pass login.conf #   keepalive 3 10 #    persist-tun #  tun/tap    persist-key #     

ファイル/etc/openvpn/login.confを次の形式で作成します。

 yourlogin yourpassword 

したがって、誰かが理解できない場合は、yourloginとyourpasswordを認証データに置き換える必要があります。

スクリプト/etc/openvpn/unban.shを作成します。これにより、ブロックされたIPのリストがアンロードされ、ルートが登録されます。

unban.sh
 #!/bin/sh TUN=`ifconfig | grep tun | awk '{print $1}'` MIN_ROUTES="15" if [ "$TUN" == "" ]; then exit; fi CHECK_ROUTES=`route | wc -l` if [ "$CHECK_ROUTES" -gt "$MIN_ROUTES" ]; then exit; fi route add 8.8.8.8/32 dev $TUN; route add 8.8.4.4/32 dev $TUN; route add 77.88.8.8/32 dev $TUN; wget "http://reestr.rublacklist.net/api/ips" -O /tmp/ip_list; LIST=`cat /tmp/ip_list | sed 's/;/\n/g' | grep -v '"' | awk -F. '{print $1"."$2"."$3".0/24"}' | sort | uniq` for IP in $LIST do echo "Adding $IP..." route add -net $IP dev $TUN; done REMOTE_IP=`cat /etc/openvpn/my.conf | grep remote | tail -n1 | awk '{print $2}'`; DEFAULT_GW=`route | grep default | awk '{print $2}'` route add ${REMOTE_IP}/32 gw $DEFAULT_GW; rm -rf /tmp/ip_list; 

ニュアンスのいくつかを説明します。

1.プロバイダーは、判明したとおり、DNS要求をインターセプトし、ブロックされたサイトの誤ったIPを提供するため、これを回避するには、VPNを介してDNS要求を送信する必要があります。 他のDNSサーバーを使用する場合は、次の行を修正する必要があります。

ルートは8.8.8.8/32 dev $ TUNを追加します。
route add 8.8.4.4/32 dev $ TUN;
ルート追加77.88.8.8/32 dev $ TUN;

GoogleおよびYandex DNSのIPをDNSサーバーのIPに置き換えます。

2. MIN_ROUTES変数は、さらにスクリプトを実行できる既存のルートの最小数に設定されます。 通常、このスクリプトを実行する前に、テーブルに15個以下のルートがあります。さらにルートがある場合は、MIN_ROUTES変数の値を最小に変更する必要がありますが、その数は少なくとも存在している必要があります。 これを確認するには、ルートを実行します| wc -l。

3.以来 私のルーターは非常に弱く、30,000ルートすべてを処理できず、時々リセットされます。また、3万ルートすべてを登録するのに約5分以上かかりました。 そのため、ルートのリストを短縮する方法を考え出す必要がありました。 解決策は、24個のサブネットを介してルートを追加することで、リストを8,000以上に減らしました。 ルーターで多数のルートを登録できる場合は、LIST変数を次のように置き換えます。

 LIST=`cat /tmp/ip_list | sed 's/;/\n/g' | grep -v '"' | sort | uniq` 

4. VPNサーバーが配置されているサブネットがロックのリストに含まれていたため、VPNサーバー自体へのルートがリセットされたため、次の行をスクリプトに追加する必要がありました。

 REMOTE_IP=`cat /etc/openvpn/my.conf | grep remote | tail -n1 | awk '{print $2}'`; DEFAULT_GW=`route | grep default | awk '{print $2}'` route add ${REMOTE_IP}/32 gw $DEFAULT_GW; 

このような問題がない場合は、スクリプトから削除できます。

次に、cronタスクスケジューラをオンにして、自動実行を有効にします。

 /etc/init.d/cron start /etc/init.d/cron enable 

crontab -eコマンドを実行して、タスクをスケジューラに追加します。

 */5 * * * * /bin/sh /etc/openvpn/unban.sh 

スクリプトは5分ごとに実行され、ルートを登録する必要があるかどうかを確認します。 開始頻度は自由に変更できます。

OpenVPN接続設定に「up unban.sh」のようなものを追加するだけで、接続直後にスクリプトが実行される場合、多くの人はおそらくcronを使用する理由を尋ねるでしょう。 私の答えは、VPN接続を再起動すると、ルートがリセットされ、スクリプトが再実行されないことです。

PS念のため:この記事の資料はすべて情報提供を目的としたものであり、行動を促すものではありません。

Source: https://habr.com/ru/post/J317354/


All Articles