転載・引用について

ユーザ用ツール

サイト用ツール


os:freebsd:gre

差分

このページの2つのバージョン間の差分を表示します。

この比較画面にリンクする

os:freebsd:gre [2020/01/28 19:20] (現在)
行 1: 行 1:
 +====== FreeBSDでgreを動かす ======
  
 +「21世紀になってもう20年経とうとするのに今頃greかよ!」と言われるかもしれないが、greを使わなければならなくなったので、記録を。
 +
 +重要なのは、greは4層のプロトコルではなく、3層のプロトコルであるということ。Firewall関係の処理で引っかかりやすいので注意が必要。
 +
 +===== 事前準備 =====
 +今回登場する各ノード(RouterやNat box)は全てFreeBSDを利用しているものとする。
 +
 +  * GRE routerになるNodeは、最低限以下の設定を行うこと
 +    * ''/boot/loader.conf''に''if_gre_load="YES"''を記述すること
 +    * ''sysctl -w net.inet.ip.forwarding=1''を設定すること
 +  * Nat Boxにおいては、以下のようになっていること
 +    * ''sysctl -w net.inet.ip.forwarding=1''を設定すること
 +    * NAT設定はpfを利用するものとする
 +      * natdやipfwなどでもできるのかもしれないが、pfしか知らないのでpfを仮定する
 +
 +===== 一番簡単な構成 =====
 +最も簡単な構成は、greで接続するRouterがそれぞれGlobal Addressを持っている場合である。
 +この場合、''man gre''で記述されている方法で設定が可能
 +
 +  * ネットワーク図
 +<code - 図1>
 +   +--- RtrA --- (Internet) --- RtrB ---+
 +                                      |
 +---+--- NetA                    NetB ---+---
 +</code>
 +
 +  * RtrA の Global Address を RtrA(G) / RtrB の Global Address を RtrB(G)
 +  * RtrA の NetA 側 Address を RtrA(A) / RtrB の NetB 側 Address を RtrB(B)
 +
 +<code - RtrA>
 +# ifconfig gre0 create
 +# ifconfig gre0 inet RtrA(A) RtrB(B)
 +# ifconfig gre0 tunnel RtrA(G) RtrB(G)
 +# route add -net NetB RtrB(B)
 +</code>
 +
 +<code - RtrB>
 +# ifconfig gre0 create
 +# ifconfig gre0 inet RtrB(B) RtrA(A)
 +# ifconfig gre0 tunnel RtrB(G) RtrA(G)
 +# route add -net NetA RtrA(A)
 +</code>
 +
 +これだけ設定すれば、Firewallなどで通信が遮断されていないかぎり、通信できるはず。
 +
 +===== 簡単なNAT超えの場合 =====
 +
 +  * ネットワーク図
 +<code - 図2>
 +   +--- RtrA --- (Internet) --- Nat --(NatNW)-- RtrB ---+
 +                                                      |
 +---+--- NetA                                    NetB ---+---
 +
 +</code>
 +
 +  * RtrA の Global Address を RtrA(G) / Nat の Global Address を Nat(G)
 +  * RtrA の NetA 側 Address を RtrA(A) / RtrB の NetB 側 Address を RtrB(B)
 +  * Nat の RtrB 側 Address を Nat(B) , Interface を NatIF / RtrB の Nat 側 Address を RtrB(N)
 +
 +<code - RtrA>
 +# ifconfig gre0 create
 +# ifconfig gre0 inet RtrA(A) RtrB(B)
 +# ifconfig gre0 tunnel RtrA(G) Nat(G)
 +# route add -net NetB RtrB(B)
 +</code>
 +
 +<code - RtrB>
 +# ifconfig gre0 create
 +# ifconfig gre0 inet RtrB(N) RtrA(A)
 +# ifconfig gre0 tunnel RtrB(N) RtrA(G)
 +# route add -net NetA RtrA(A)
 +</code>
 +
 +<code - Nat>
 +# 以下 pf.conf の当該部分(NAT設定)
 +rdr pass on NatIF proto { gre } from any to Nat(G) -> RtrB(N)
 +</code>
 +
 +これで、gre over NATが動作するように見える。実際、tcpdumpでpingを観測してみると、greもicmpも見えるので問題ないと思われる。
 +
 +===== 考察 =====
 +  * gre tunnel設定には、Src/Destの指定が必須なので、NAT Routerの設定を行える環境であるならば、RtrAとInternetの間にNAT Boxを導入しても動きそう
 +  * srcとdestの組み合わせで、複数のtunnelを制御することもできそう
 +  * pfsyncと組み合わせ、冗長構成をとることもできるかもしれない
 +  * IPsec over greを実装するのも比較的容易に見える
 +
 +===== 参考 =====
 +  * [[https://dn42.net/howto/gre-on-freebsd]] GRE on FreeBSD
 +  * [[https://dn42.net/howto/ipsec-on-freebsd]] IPSec on FreeBSD
os/freebsd/gre.txt · 最終更新: 2020/01/28 19:20 (外部編集)