ルーターのバックアップインターネットチャネルをdd-wrtファームウェアに接続します

プロバイダーが事故を起こし、インターネットアクセスがあなたの場所で失われた場合、それは不快です。 この時点で家から遠く離れていて、自宅のコンピューターまたはNASに登る必要がある場合、それは二重に不快です。 私の場合、MGTSはチャネルの落下を防ぎ、古い銅線を別のインターネットチャネルを受信した光学系に置き換え、dd-wrtのさまざまなマニュアルを読んでくれました。 光学系を手伝うことができなければ、dd-wrtの既成のソリューションを喜んで共有します。



解決策は普遍的ではありませんが、私には思えますが、それは非常にシンプルであり、その基礎に基づいて、経験の浅いユーザーは独自に作成することができなくても、この人気のあるファームウェアの視野と理解を広げることができます。











Comradeのasus rt-n16ルーターとファームウェアを使用しています。 Kong 22000 ++。 メインプロバイダーからのインターネットはケーブル経由で送られてきます。すべての設定はdhcp経由でルーターによって取得されます。 dd-wrtインターフェースでは、次のようになります。







実際、すべてがデフォルトです。 内部ネットワーク内のルーターのアドレスが192.168.199.1に変更されます。



インターネットチャネルの切り替えは、JFFS2ルーターの内部メモリに作成するスクリプトによって実行されます。それぞれ、この内部メモリを有効にする必要があります。 これを行うには、dd-wrtインターフェースのAdministration-Mangementセクションで、対応するオプションを有効にします。







JFFS2を有効にした後、メモリをクリアする必要があります。 これを行うには、「Clean JFFS2」を選択し、「適用」をクリックします。 ルーターの再起動が必要になる場合があります。 私たちのタスクは、このメモリに空き領域があることを確認することです。



telnetを使用してルーターに行きましょう。 これにはパテを使用します。



putty -telnet 192.168.199.1







別の名前を使用してdd-wrt ​​Webインターフェイスにログインする場合でも、ユーザー名はrootです。 パスワードは、Webインターフェースへのログインに使用するものです。



叙情的な余談
私たちが紹介する最初のチームとその結果は私のものです

 root@DD-WRT:~# nvram show >/dev/null size: 29978 bytes (2790 left)
      
      





ご覧のとおり、nvramには空きバイトがほとんどないため、スクリプトを保存しません。 このメモリが使い果たされると、ルーターは再起動し、すべてのdd-wrt構成をデフォルトに戻します。 したがって、たとえば、Webインターフェイスでopenvpn証明書をアップロードしないでください。Webインターフェイスを介して保存された証明書はnvram変数に保存されるためです。 Openvpn証明書はjffs2メモリに保存し、次の方法でopenvpn設定の「追加の構成」変数に接続できます。





次のステップ。 バックアップケーブルをルーターのLAN1ポートに接続します。 私の場合、バックアップケーブルはMGTSが提供したGPON機器からのものです。 この機器は、ローカルネットワーク192.168.100.0/255.255.255.0でインターネットを配布します。 ルーターの必要なポートを他のポートから「引き裂き」、GPON機器ネットワークからのアドレス(192.168.100.200など)を割り当てる必要があります。



現在、情報は特定のハードウェア、つまりasus rt-n16に固有です。 ターミナルで次のコマンドを入力して、答えを見てみましょう。

 root@DD-WRT:~# nvram show | grep vlan.*port vlan2ports=0 8 vlan0ports=1 2 3 4 5* vlan1ports=4 3 2 1 8* size: 29978 bytes (2790 left) root@DD-WRT:~# nvram show | grep vlan.*hw vlan2hwname=et0 vlan1hwname=et0 vlan0hwname=et0 size: 29978 bytes (2790 left)
      
      





ポートグループはバランで結合されます。 ポート0はルーターのWANポート、ポート1234はルーターのLAN4、LAN3、LAN2、LAN1ポートに対応するルーターのポートです。つまり、ポート4はルーターLAN1の場合に署名されます。 ポート8およびポート8 *はプロセッサポートであり、これらを通してルータのインターフェイスが表示されます。 詳細に触れたくはありませんが、原則として、バランはルーターのプロセッサにロックする必要があります。 4番目のポートを「切り離し」ましょう。

 root@DD-WRT:~# nvram set vlan0ports="1 2 3 5*" root@DD-WRT:~# nvram set vlan1ports="3 2 1 8*"
      
      





次に、ポート4を3番目のバランに割り当てます

 root@DD-WRT:~# nvram set vlan3ports="4 8"
      
      





新しいバランを表示するには、コマンドを入力する必要があります

 root@DD-WRT:~# nvram set vlan3hwname=et0
      
      





変更を保存する

 root@DD-WRT:~# nvram commit
      
      





類推により、dd-wrtファームウェアを備えた他のルーターに対しても実行できます。



今、不規則な後退。 ddwrt Webインターフェイスには、valansの設定があります。 しかし、それらを試してみると、何も機能しないだけでなく、ルーターをリセットするだけで役立つ場合があります。

そして今、余談
おそらく、ルーターにdd-wrtをインストールすることについて読んだ人は誰でも、魔法の儀式「30 30 30」に出くわしました。 これは、ルーターの完全なリセットです。 そうしないと問題が発生する可能性があります。 では、その理由を説明します。 Webインターフェースの設定をリセットしても、すべてのnvram変数に影響はありません。特に、私たちが行ったvalansに対する変更は残っている可能性があります。 したがって、儀式は本当に必要です。 ただし、端末からの別のコマンドに置き換えることができます(まだルーターにアクセスできる場合):

 root@DD-WRT:~# erase nvram root@DD-WRT:~# reboot
      
      





Valansで「プレイ」し、すべてが機能しなくなった場合、上記の「30 30 30」の完全なリセットが役立つ場合があります。



4番目のポートに接続されている新しいインターフェイスのアドレスは、起動時にスクリプトから割り当てます。 したがって、このスクリプトの作成を始めましょう。 しかし、最初に、それはどこに保存されます。 /jffs/etc/config/



dd-wrt ​​wikiが教えてくれるように、拡張子が.startupの/jffs/etc/config/



フォルダー内のすべてのスクリプトは、ファイアウォールが設定される前にシステムの起動時に実行されます。 スクリプトにvlan3.startupという名前を付けて、次の行を記述しましょう。

 #!/bin/sh WAN2_IFNAME=vlan3 WAN2_IPADDR=192.168.100.200 WAN2_GATEWAY=192.168.100.1 WAN2_NETMASK=255.255.255.0 if [ "$(nvram get wan2_ipaddr)" != "$WAN2_IPADDR" ]; then nvram set wan2_ifname=$WAN2_IFNAME nvram set wan2_ipaddr=$WAN2_IPADDR nvram set wan2_gateway=$WAN2_GATEWAY nvram set wan2_netmask=$WAN2_NETMASK nvram commit fi ifconfig $(nvram get wan2_ifname) up $(nvram get wan2_ipaddr) netmask $(nvram get wan2_netmask)
      
      





これらの行では、すべてが単純です。 nvram 4に新しい変数を追加し、バックアップインターネットポートのインターフェイス名、アドレス、マスク、ゲートウェイを入力しました。 バックアップを開始するたびに、バックアップのインターネット設定を変更する必要がある場合に備えて、アドレスがスクリプト変数で指定されたものであることを確認します。 次に、指定された値でポートを構成します。 現在の変数では、これは次のようになります。

ifconfig vlan3 up 192.168.100.200 netmask 255.255.255.0







スクリプトに無限ループを追加します。このループでは、インターネットチャネルをバックアップチャネルに、またはその逆に切り替えます。

 INTERVAL=30 while sleep $INTERVAL do WAN1ALIVE=0 WAN2USING=0 WAN1GW=`nvram get wan_gateway` echo "check" if [ "$WAN1GW" != "0.0.0.0" ]; then if [ "1" = `ping -c 1 $WAN1GW 2>/dev/null | awk '/packets received/ {print $4}'` ]; then WAN1ALIVE=1 echo "wan1alive" fi fi TARGET=`ip -4 route list 0/0 | awk -v gate="via "$WAN2_GATEWAY '$0 ~ gate {print $3}'` if [ ! -z "$TARGET" ]; then WAN2USING=1 echo "wan2using" fi if [ "$WAN1ALIVE" = "1" ] && [ "$WAN2USING" = "1" ]; then /jffs/etc/config/wan1.up echo "Changed active WAN port to 1!" fi if [ "$WAN1ALIVE" = "0" ] && [ "$WAN2USING" = "0" ]; then if [ "1" = `ping -c 1 $WAN2_GATEWAY 2>/dev/null | awk '/packets received/ {print $4}'` ]; then /jffs/etc/config/wan2.up echo "Changed active WAN port to 2!" fi fi done;
      
      





つまり、この長いコードは次のように説明できます。 確認するn秒ごとに:

  1. メインチャネルの現在のゲートウェイアドレス。 これは、nvramのwan_gateway変数に格納され、プライマリゲートウェイがプライマリプロバイダーからdhcpパラメーターを受信すると自動的に割り当てられます。 このアドレスが「0.0.0.0」と「0.0.0.0」に等しくない場合、アドレスを取得できない場合、つまりプロバイダーが嘘をついている場合、それはpingされ、応答の場合、WAN1ALIVEフラグを1、つまりメインチャネルに設定します労働者になるはずです。
  2. バックアップゲートウェイアドレスがルーティングテーブルにあるかどうか。 存在する場合、フラグWAN2USING = 1を設定します。つまり、バックアップインターネットチャネルが現在使用されています。
  3. メインチャネルが機能し、バックアップチャネルが使用されている場合、メインインターネットチャネルに切り替えます。
  4. メインチャネルが機能せず、バックアップチャネルが使用されていない場合は、バックアップチャネルゲートウェイの可用性をテストし、ワーキングリザーブに切り替えます。




メインチャネルwan1.upを有効にするスクリプト:

 #!/bin/sh # WAN1 DEV=vlan2 GATEWAY=`nvram get wan_gateway` DNS1=8.8.8.8 DNS2=8.8.4.4 nvram set wan_dns="$DNS1 $DNS2" while ip route del default; do :; done ip route add default via $GATEWAY dev $DEV echo "nameserver $DNS1" >/tmp/resolv.dnsmasq echo "nameserver $DNS2" >>/tmp/resolv.dnsmasq pr="$(ps|awk '/dnsmasq/ {print $1}')" kill -9 $pr dnsmasq --conf-file=/tmp/dnsmasq.conf
      
      





ここではすべてが簡単です。 すべてのデフォルトゲートウェイを削除しました。 はい、いくつかあります。ルーターを再起動した後、メインチャネルが使用できなくなった場合、バックアップインターネットがオンになり、1つのデフォルトゲートウェイがあります。 その後、メインチャネルが機能し始めると、dd-wrtは別のデフォルトゲートウェイを追加します。 何もする必要はありません。 私は長い間考えたくなかったし、「ダーティハック」が現れた: while ip route del default; do :; done



while ip route del default; do :; done



つまり、これ以上ゲートウェイがないためエラーが発生するまですべてのデフォルトゲートウェイを削除します。 glyい、最高のことを考えてください。



すべてのデフォルトゲートウェイを削除したら、新しいゲートウェイを追加します。これは、wan_gateway nvram変数に記録されます(メインプロバイダーからパラメーターを受信するときにdd-wrtロジックによって書き込まれます)。 dnsをdns googleに置き換え、 dnsmasqプロセスを強制終了し、このプロセスを再度開始します。



バックアップチャネルwan2.upを有効にするスクリプトは同じ方法で設計されていますが、ゲートウェイアドレスは変数wan2_gateway nvramから取得され、ルーターの4番目のポートに関連付けられたインターフェイスが使用されます。



 #!/bin/sh # WAN2 DEV=vlan3 GATEWAY=`nvram get wan2_gateway` DNS1=8.8.8.8 DNS2=8.8.4.4 nvram set wan_dns="$DNS1 $DNS2" while ip route del default; do :; done ip route add default via $GATEWAY dev $DEV echo "nameserver $DNS1" >/tmp/resolv.dnsmasq echo "nameserver $DNS2" >>/tmp/resolv.dnsmasq pr="$(ps|awk '/dnsmasq/ {print $1}')" kill -9 $pr dnsmasq --conf-file=/tmp/dnsmasq.conf
      
      





ファイアウォールがオンになった直後に、WANを上げた後に実行される小さなスクリプトvlan3.wanupが残ります。



 #!/bin/sh iptables -t nat -A POSTROUTING -o $(nvram get wan2_ifname) -j SNAT --to $(nvram get wan2_ipaddr)
      
      





スクリプトの目的は、バックアップインターフェイスを介してNATのルールを追加することです。



これで、ルーターを再起動してテストできます。 すべてのスクリプトはルーターから取得しました。ルーターは独自の寿命を持ち、結果の構成を長時間テストします。



一般化されたスクリプト
次のシートをtelnet \ sshウィンドウに挿入して、Enterキーを押します。

 nvram set vlan0ports="1 2 3 5*" nvram set vlan1ports="3 2 1 8*" nvram set vlan3ports="4 8" nvram set vlan3hwname=et0 nvram commit mkdir -p /jffs/etc/config cat << 'EOF' > /jffs/etc/config/vlan3.startup #!/bin/sh WAN2_IFNAME=vlan3 WAN2_IPADDR=192.168.100.200 WAN2_GATEWAY=192.168.100.1 WAN2_NETMASK=255.255.255.0 if [ "$(nvram get wan2_ipaddr)" != "$WAN2_IPADDR" ]; then nvram set wan2_ifname=$WAN2_IFNAME nvram set wan2_ipaddr=$WAN2_IPADDR nvram set wan2_gateway=$WAN2_GATEWAY nvram set wan2_netmask=$WAN2_NETMASK nvram commit fi ifconfig $(nvram get wan2_ifname) up $(nvram get wan2_ipaddr) netmask $(nvram get wan2_netmask) INTERVAL=30 while sleep $INTERVAL do WAN1ALIVE=0 WAN2USING=0 WAN1GW=`nvram get wan_gateway` echo "check" if [ "$WAN1GW" != "0.0.0.0" ]; then if [ "1" = `ping -c 1 $WAN1GW 2>/dev/null | awk '/packets received/ {print $4}'` ]; then WAN1ALIVE=1 echo "wan1alive" fi fi TARGET=`ip -4 route list 0/0 | awk -v gate="via "$WAN2_GATEWAY '$0 ~ gate {print $3}'` if [ ! -z "$TARGET" ]; then WAN2USING=1 echo "wan2using" fi if [ "$WAN1ALIVE" = "1" ] && [ "$WAN2USING" = "1" ]; then /jffs/etc/config/wan1.up echo "Changed active WAN port to 1!" fi if [ "$WAN1ALIVE" = "0" ] && [ "$WAN2USING" = "0" ]; then if [ "1" = `ping -c 1 $WAN2_GATEWAY 2>/dev/null | awk '/packets received/ {print $4}'` ]; then /jffs/etc/config/wan2.up echo "Changed active WAN port to 2!" fi fi done; EOF chmod +x /jffs/etc/config/vlan3.startup cat << 'EOF' > /jffs/etc/config/vlan3.wanup #!/bin/sh iptables -t nat -A POSTROUTING -o $(nvram get wan2_ifname) -j SNAT --to $(nvram get wan2_ipaddr) EOF chmod +x /jffs/etc/config/vlan3.wanup cat << 'EOF' > /jffs/etc/config/wan1.up #!/bin/sh # WAN1 DEV=vlan2 GATEWAY=`nvram get wan_gateway` DNS1=8.8.8.8 DNS2=8.8.4.4 nvram set wan_dns="$DNS1 $DNS2" #`ip -4 route list 0/0 | awk '/default via/ {print "ip route delete default"}'` | sh # ip route delete default while ip route del default; do :; done ip route add default via $GATEWAY dev $DEV echo "nameserver $DNS1" >/tmp/resolv.dnsmasq echo "nameserver $DNS2" >>/tmp/resolv.dnsmasq pr="$(ps|awk '/dnsmasq/ {print $1}')" kill -9 $pr dnsmasq --conf-file=/tmp/dnsmasq.conf EOF chmod +x vi /jffs/etc/config/wan1.up cat << 'EOF' > /jffs/etc/config/wan2.up #!/bin/sh # WAN2 DEV=vlan3 GATEWAY=`nvram get wan2_gateway` DNS1=8.8.8.8 DNS2=8.8.4.4 nvram set wan_dns="$DNS1 $DNS2" #`ip -4 route list 0/0 | awk '/default via/ {print "ip route delete default"}'`|sh # ip route delete default while ip route del default; do :; done ip route add default via $GATEWAY dev $DEV echo "nameserver $DNS1" >/tmp/resolv.dnsmasq echo "nameserver $DNS2" >>/tmp/resolv.dnsmasq pr="$(ps|awk '/dnsmasq/ {print $1}')" kill -9 $pr dnsmasq --conf-file=/tmp/dnsmasq.conf EOF chmod +x /jffs/etc/config/wan2.up
      
      









もちろん、多くの修正/追加が可能であり、追加する必要がありますが、私の目標、つまり自宅でバックアップチャネルをすばやく固定することは完了しました。 主な問題は、バックアップチャネルを操作する際のファイアウォールとポート転送です。これらは必要ないため、構成しませんでした。 それが必要な人のために-vlan3.wanupスクリプトを補完します。 続編で頑張ってください!



dd-wrt ​​wikiのアイデア。



All Articles