ip コマンドをつかって,コンピュータ間で GRE トンネルをはることができる. すこしコマンドをかえるだけで IP/GRE でも (IP/)Ethernet/GRE でも実現できる.
GRE (Generic Routing Encapsulation) は IETF で規定された Layer 3 (L3) トンネリング・プロトコルだ. IP/GRE/IPのためのスクリプトの例をあげる.
# addgreip REMOTE_IP LOCAL_IP GRE_KEY LOCAL_SLICE_IP ip tunnel add gre0 mode gre remote ${1} local ${2} key ${3} ip addr add ${4} dev gre0 ip link set gre0 up ip link set gre0 mtu 1460
最初の行に書いてあるように,引数は相手の IP アドレス (GRE トンネルの終点),自分の IP アドレス (GRE トンネルの始点),GRE キー,トンネル上の自分の IP アドレス (仮想ネットワークの IP アドレス) とサブネット長だ. サブネット長を指定しないとエラーになる.
GRE キーは ip tunnel コマンドで指定しなければパケット・サイズはちいさくなるが,上記のスクリプトではかならず指定するようになっている.
コマンドの使用例をあげる.
./addgreip 10.0.32.129 10.0.32.15 1 192.168.10.2/24
つぎのは IP/Ethernet/GRE/IP のためのスクリプトだ.
# addgreether REMOTE_IP LOCAL_IP GRE_KEY LOCAL_SLICE_IP ip link add gre1 type gretap remote ${1} local ${2} key ${3} ip addr add ${4} dev gre1 ip link set gre1 up ip link set gre1 mtu 1450
コマンド引数は IP/GRE/IP のときとかわらない. 挿入される MAC ヘッダにつける MAC アドレスは,指定しないと適当につけてくれる. コマンドの使用例をあげる.
./addgreether 10.0.32.129 10.0.32.15 1 192.168.10.2/24
ip コマンドは,ふるい Linux などをつかっているばあいには,もしかすると上記のコマンド (type gretap) をうけつけないかもしれない. そのときは,"iproute2" というパッケージをあたらしいものにいれかえればよい.
IP/GRE/IP のときは ip tunnel コマンドで指定するが,IP/Ethernet/GRE/IP のときは ip link コマンドを指定する. コマンドのキーワードも IP/GRE のときは GRE の指定に mode というパラメタを指定するが,IP/Ethernet/GRE のときは "type gretap" と書く. なぜこんなにちがうのかわからない.