OpenWRTコーシャトンネリング

したがって、2つのLinuxホスト間のトンネルを編成する必要があります。その1つは、この素晴らしいファームウェアを搭載したソーホールーターです。 私たちにとって最も重要なことは接続速度とオーバーヘッドコストの削減であるということをすぐに予約します。 そのため、認証、トラフィック暗号化を実装するパッケージをインストールすることを忘れますが、ルーターのメモリで大量の貴重なキロバイトを占有します。 ipv4トンネルのみを考慮します。 カーネルによって標準的にサポートされています: 選択肢はあなた次第ですが、速度を低下させてシステムの負荷を増やすという形での自然なオーバーヘッドに加えて、プロバイダーはこれに賛成の引数として機能し、プロトコルの1つを単純にブロックすることができます。標準設定でのiperfテスト、メガビット単位の値:
トンネル 平均的 最低 最大
トンネルなし 30.9 29.8 31.9
ipip 24.8 24.4 25.3
gre 24.0 22.3 24.9

システムの準備

opkg update #    opkg install ip #    ,    iproute2 - "must have"-   linux- opkg install kmod-gre # gre-(№47,  ,        iptables) opkg install kmod-ipip # ipip-(№4)
      
      



OpenWRTでは、ネットワークインターフェイスの設定は/etc/config/network



ファイルに記述されています。 このシステムのスタイルの特徴を守ることを提案します。そこで設定を行いますが、問題はトンネルを記述する標準的な方法がなく、ifupでできるのと同じように簡単だということです。 新しいプロトコルの定義方法を詳細に説明するマニュアルが用意されています。

インターフェースの説明

したがって、最終的には、トンネルの説明があります。私の場合、gre:
 #      -  config 'interface' 'gretunnel' option 'proto' 'tunnel' #,        option 'tunnel_end' '1.2.3.4' #    option 'tunnel_start' '5.6.7.8' option 'remote_address' '192.168.0.1' #   - option 'local_address' '192.168.0.2' option 'mtu' '1476' option 'mode' 'gre' #gre/ipip #option 'gateway' '192.168.0.1' #       
      
      



繰り返しますが、私の場合、ubuntuサーバーの場合、標準的な方法でトンネルの2番目の端を上げます。
 auto gretunnel iface gretunnel inet static address 192.168.0.1 netmask 255.255.255.255 #,     ,      ? pointopoint 192.168.0.2 mtu 1476 pre-up ip tunnel add gretunnel mode gre remote 5.6.7.8 local 1.2.3.4 post-down ip tunnel del gretunnel
      
      



新しいプロトコルを定義する

このガイドでは、ネットワークインターフェイスのライフサイクルを完全に説明する4つの手順について説明します。 それらは/lib/network/



ディレクトリにある任意のファイルに追加できますが、システムまたは個々のパッケージの可能なアップグレードで変更が保存さtunnel.sh



ように、個別のtunnel.sh



作成することをお勧めします。
スキャン
仮想インターフェイス(PPP、6in4、IPトンネルなど)を作成するプロトコルは、 hotplug



システムのifup/ifdown



イベントハンドラーに必要なインターフェイス構成のifname



属性を合成するためのscan



手順を実装する必要があります。 実際、構成でoption ifname tunnel_name



直接option ifname tunnel_name



が、なぜですか?)
 scan_tunnel() { config_set "$1" ifname "$1" }
      
      



つまり、インターフェイスに構成名と同じ名前を付けるだけです。
コールドプラグ
デフォルトでは、システムの起動時に/proc/net/dev/



riseに存在するインターフェイスのみが存在します。 ここで、インターフェイスを作成し、ほぼ完全に構成します。ポイントツーポイントアドレスのみを指定するわけではありません。これらは、 /lib/network/config.sh



定義されたprepare_interface



プロシージャでリセットされる/lib/network/config.sh



です。
 coldplug_interface_tunnel() { local mtu, tunnel_start, tunnel_end, mode, ifname config_get mode "$1" mode ([[ "$mode" == "ipip" ]] && insmod ipip) || insmod ip_gre config_get mtu "$1" mtu config_get tunnel_end "$1" tunnel_end config_get tunnel_start "$1" tunnel_start config_get ifname "$1" ifname ip tunnel add "$ifname" mode "$mode" local "$tunnel_start" remote "$tunnel_end" }
      
      



セットアップ
ここで、インターフェイスがアップし、最後まで設定します
 setup_interface_tunnel() { local alocal, aremote, mtu, defroute config_get alocal "$2" local_address config_get aremote "$2" remote_address config_get mtu "$2" mtu ip link set dev "$1" up mtu "$mtu" ip address add dev "$1" "$alocal" peer "$aremote" config_get defroute "$2" gateway [[ -n "$defroute" ]] && ip route add default via "$aremote" dev "$1" env -i ACTION="ifup" INTERFACE="$2" DEVICE="$1" PROTO=tunnel /sbin/hotplug-call "iface" & }
      
      



最後の行では、重要な属性をブール値の真理値に設定するメカニズムが起動されます。これにより、通常のファイアウォールでインターフェイスを操作できるようになり、このインターフェイスを介してルートを割り当てることも可能になります。
やめて
インターフェイスを省略します
 stop_interface_tunnel() { local ifname "$1" ifname ip link set dev "$ifname" down }
      
      



ファイアウォールを操作する

ただし、デフォルトでは、通常のLinuxシステムと同様に、 filter



テーブルにはデフォルトでDROP



ポリシーがあります。 上記のgretunnel



インターフェイスを通過するトラフィックに関する作業を説明する必要があります。 これを行うには、ファイル/etc/config/firewall



ゾーンを作成します:
 config 'zone' option 'name' 'gretunnel' option 'output' 'ACCEPT' option 'forward' 'ACCEPT' option 'mtu_fix' '1' option 'input' 'ACCEPT'
      
      



その名前がインターフェイスの名前と一致する場合、標準の1500バイトとは異なるmtu



忘れないでください。 -j MASQUERADE



成功しませんでした(理由を教えていただけますか?)。そのためSNAT'



パッケージをSNAT'



ます。 これを行うために、対応するルールを説明します。
 config redirect option src lan option dest gretunnel option src_dip 192.168.0.2 option proto 'udp icmp tcp' option target SNAT
      
      



all



proto



オプションに入れない理由」という明らかな質問があるかもしれません-残念ながら、私は答えがありません、このオプションでは動作しませんが、そうです:(最後に、ローカルネットワークからのforward'



トラフィックを許可forward'



ますトンネルの2番目の端。
 config 'forwarding' option 'src' 'lan' option 'dest' 'gretunnel'
      
      



ルーティングまたはこれがすべて必要だった理由

正規のケースから始めましょう-地理的に離れた2つのホスト/ネットワークを1つのローカルネットワークに結合します。 セキュリティ専門家の攻撃を予想しています。トラフィックは保護されておらず、気にする必要はありません。単純さと速度だけが重要なので、暗号化は別のトピックに任せます。 /etc/config/network



in /etc/config/network



ようなものを書き/etc/config/network



 config 'route' option 'interface' 'gretunnel' option 'target' '192.168.2.0' option 'netmask' '255.255.255.0' option 'gateway' '192.168.0.1'
      
      



そして、2番目の端では、ネットワーク/ホストが接続されているすべてのものと同様の操作を実行します。次に、個人的にdlink-320を再フラッシュするように促されたケースを検討します。 私のプロバイダーは、1日目に、ネットワークから加入者をスイッチポートで物理的に切断しません。代わりに、インターネットリソースや一部の内部リソースへのアクセスを制限しながら、ローカルネットワークへのフルアクセスを残します。 さて、次のように進めましょう-すべての「合法的なトラフィック」をプロバイダーのゲートウェイにルーティングし、他のすべてをトンネルにルーティングします。 地元のベテランは、 ここであなたのプロバイダーネットワークを見ることをお勧めします。 ファイル/etc/config/network



、プロバイダーのゲートウェイに割り当てられたデフォルトルートを示すオプション/etc/config/network



コメントします。
 config 'interface' 'wan' option 'ifname' 'eth0.1' option 'proto' 'static' option 'ipaddr' '5.6.7.8' option 'netmask' '255.255.255.252' # option 'gateway' '5.6.7.7' option 'defaultroute' '0' option 'peerdns' '0' option 'dns' '8.8.4.4'
      
      



トンネルの説明で対応するオプションのコメントを外します
 option 'gateway' '192.168.0.1'
      
      



「合法的な」トラフィックを忘れないでください
 config 'route' option 'interface' 'wan' option 'target' '5.6.7.6' option 'netmask' '255.255.255.252' option 'gateway' '5.6.7.7' #   config 'route' option 'interface' 'wan' option 'target' '10.0.0.0' option 'netmask' '255.0.0.0' option 'gateway' '5.6.7.7'
      
      



それだけです。今では無料のインターネットを利用できます:)実際、私のプロバイダーが提供する「無料サービス」は果てしなくありません。 45日後、ポートはまだブロックされていますが、顧客志向であるためにふさわしくないため、再計算もします-サービスを使用して半月しか支払うことができません。 「無料」の8メガビットです)この記事を読んだ後、「ある種のinitscriptで10行で同じことができるのに、なぜ大騒ぎをする必要があるのでしょうか?」 「幸いなことに、この質問に対する答えはありますが、おそらく議論の余地があります。システムはそこで採用されているイデオロギーの枠組みの中で、ハックやコーシャ、いわばコーシャなしでやろうとするべきだと思います。テレビですが、これは別のトピックのトピックです。



All Articles