転載・引用について

ユーザ用ツール

サイト用ツール


サイドバー

Site Contents Index

転載・引用について

RSS

os:freebsd:gre

FreeBSDでgreを動かす

「21世紀になってもう20年経とうとするのに今頃greかよ!」と言われるかもしれないが、greを使わなければならなくなったので、記録を。

重要なのは、greは4層のプロトコルではなく、3層のプロトコルであるということ。Firewall関係の処理で引っかかりやすいので注意が必要。

事前準備

今回登場する各ノード(RouterやNat box)は全てFreeBSDを利用しているものとする。

  • GRE routerになるNodeは、最低限以下の設定を行うこと
    • /boot/loader.confif_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で記述されている方法で設定が可能

  • ネットワーク図
図1
   +--- RtrA --- (Internet) --- RtrB ---+
   |                                    |
---+--- NetA                    NetB ---+---
  • RtrA の Global Address を RtrA(G) / RtrB の Global Address を RtrB(G)
  • RtrA の NetA 側 Address を RtrA(A) / RtrB の NetB 側 Address を RtrB(B)
RtrA
# ifconfig gre0 create
# ifconfig gre0 inet RtrA(A) RtrB(B)
# ifconfig gre0 tunnel RtrA(G) RtrB(G)
# route add -net NetB RtrB(B)
RtrB
# ifconfig gre0 create
# ifconfig gre0 inet RtrB(B) RtrA(A)
# ifconfig gre0 tunnel RtrB(G) RtrA(G)
# route add -net NetA RtrA(A)

これだけ設定すれば、Firewallなどで通信が遮断されていないかぎり、通信できるはず。

簡単なNAT超えの場合

  • ネットワーク図
図2
   +--- RtrA --- (Internet) --- Nat --(NatNW)-- RtrB ---+
   |                                                    |
---+--- NetA                                    NetB ---+---
  • 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)
RtrA
# ifconfig gre0 create
# ifconfig gre0 inet RtrA(A) RtrB(B)
# ifconfig gre0 tunnel RtrA(G) Nat(G)
# route add -net NetB RtrB(B)
RtrB
# ifconfig gre0 create
# ifconfig gre0 inet RtrB(N) RtrA(A)
# ifconfig gre0 tunnel RtrB(N) RtrA(G)
# route add -net NetA RtrA(A)
Nat
# 以下 pf.conf の当該部分(NAT設定)
rdr pass on NatIF proto { gre } from any to Nat(G) -> RtrB(N)

これで、gre over NATが動作するように見える。実際、tcpdumpでpingを観測してみると、greもicmpも見えるので問題ないと思われる。

考察

  • gre tunnel設定には、Src/Destの指定が必須なので、NAT Routerの設定を行える環境であるならば、RtrAとInternetの間にNAT Boxを導入しても動きそう
  • srcとdestの組み合わせで、複数のtunnelを制御することもできそう
  • pfsyncと組み合わせ、冗長構成をとることもできるかもしれない
  • IPsec over greを実装するのも比較的容易に見える

参考

このウェブサイトはクッキーを使用しています。 Webサイトを使用することで、あなたはあなたのコンピュータにクッキーを保存することに同意します。 また、あなたはあなたが私たちのプライバシーポリシーを読んで理解したことを認めます。 同意しない場合はウェブサイトを離れてください。クッキーに関する詳細情報
os/freebsd/gre.txt · 最終更新: 2020/01/28 19:20 (外部編集)