ifconfig 与IP 建立tunnel 或GRE通道笔记 ,针对rhel5.3

5. GRE 及其它通道技术 (GRE and other tunnels)

在 Linux 里面的 tunnel 共分三类�o即 IP in IP tunneling�p GRE tunneling�p以及核心以?nbsp;的 tunnels (例如�sPPTP)。

5.1 关于 tunnels 的几项注意 (A few general remarks about tunnels):

Tunnels 可以用来做一些非比寻常的酷玩意。不过�o如果设定不慎�o也会将事情弄得一塌糊涂。如果您并非 胸有成竹�o那就千万不要将您的预设网关指向 tunnel 设备。还有�otunneling 也会增加额?nbsp;的 overhead�o因为它需要额?nbsp;的 IP 标头(header)。一般而言�o每一个封包大概 20 byte 左右�o这样�o一个正常的网络封包体积 (MTU) 会是 1500 bytes�o但如封包果经 tunnel 传送�o却只有 1480 byte 而已。这其实也不算是什么问题�o但是当您有机会用 tunnels 来连接大型网络的时候�o请务必检查 IP 封包的碎片和重组(fragmentation/reassembly)细节。当然���o建立 tunnel 的话�o最好是从 tunnel 的两端同时着手�o双管齐下。

5.2 IP in IP tunneling

此类 tunneling 技术其实在 Linux 里已行之有?nbsp;了。它需要两个核心模块�sipip.o 和 new_tunnel.o。

modprobe ipip

比方说�o您有 3 个网络�sA 和 B 皆为内部网络�o而透过网络 C (或曰 Internet) 将两者连接起来。这样�o我们的网络 A 会是如此�s

network 10.0.1.0

netmask 255.255.255.0

router 10.0.1.1

接网络 C 的网关地址为 172.16.17.18。

而网络 B 则这般�s

network 10.0.2.0

netmask 255.255.255.0

router 10.0.2.1

接网络 C 的网关地址为 172.19.20.21 。

对网络 C 而言�o我们假设它能够双向的将网络 A 和 B 之间的封包送递对方。您甚至可以用 Internet 啦。

好了�o然后您要做的事情是�s

首先�o确定所有模块都装好了�s

insmod ipip.o

insmod new_tunnel.o

modprobe ipip

然后�o在网络 A 的 router 上�o这样做�s

ifconfig tunl0 10.0.1.1 pointopoint 172.19.20.21

route add -net 10.0.2.0 netmask 255.255.255.0 dev tunl0

然后在网络 B 的 router 上�s

ifconfig tunl0 10.0.2.1 pointopoint 172.16.17.18

route add -net 10.0.1.0 netmask 255.255.255.0 dev tunl0

完成后�o将 tunnel 暂时关闭�s

ifconfig tunl0 down

弹指间�o就这样搞定了。然而�o您不能透过 IP-in-iP tunnel 传送广播或 IPv6 信息。您刚�u将两个本来不能相互沟通的 IPv4 网络连接起来了�o然仅此而已。基于兼容考虑�o此程序代码由来已久�o因而逆溯至 1.3 版核心皆兼筹并顾。据我所知�o Linux 之 IP-in-IP tunneling 并不能在其它的作?nbsp;系统或 router 上工作。然而它短小精悍�o实属首选�o除非您考虑用 GRE。

5.3 GRE tunneling

GRE 是一个原本由 Cisco 开发的 tunneling 协议�o较于 IP-in-IP tunneling�o它略为能耐一些。例如�o您能够透过 GRE tunnel 传送 multicast 和 IPv6 信息。

在 Linux 里�o您得借助 ip_gre.o 模块。

modprobe ip_gre

IPv4 Tunneling

不如先让我们将 IPv4 tunneling 做起来吧�s

比方说�o您有 3 个网络�sA 和 B 皆为内部网络�o而透过网络 C (或曰 Internet) 将两者连接起来。

关于网络 A �o如下�s

network 10.0.1.0

netmask 255.255.255.0

router 10.0.1.1

在网络 C 上的 router 地址为 172.16.17.18。然后让我们称这个网络为 neta (好了�o万事起头难)。

然后�o关于网络 B�s

network 10.0.2.0

netmask 255.255.255.0

router 10.0.2.1

在网络 C 上的 router 地址为 172.19.20.21。然后让我们称这网络为 netb 好了(革命尚未成功�o同志仍需努力)。

对网络 C 而言�o我们假设它能够双向的将网络 A 和 B 之间的封包送递对方。至于何以然及何所以然�o则非我们所要操心的。

接下来�o在网络 A 的 router 上�o您如此做�s

ip tunnel add netb mode gre remote 172.19.20.21 local 172.16.17.18 ttl 255

ip link set netb up

ip addr add 10.0.1.1 dev netb

ip route add 10.0.2.0/24 dev netb

这里�o我们不妨研究一下。在第一行里面�o我们新增了一个 tunnel 设备�o称之为 netb (显而易见�o因为这正是吾之所欲也)。再来�o我们让它使用 GRE 协议(mode gre)�o其远程地址为 172.19.20.21 (于另一端的 router)�o这样我们的 tunneling 封包将从 172.16.17.18 从出(您的 router 在网络 C 上可以具有好几个 IP 地址�o并由您决定用哪一个来做 tunneling)�o而且�o封包的 TTL 字段被设定为 255 (ttl 255)。

第 2 行我们将这个设备启动起来。

在第 3 行�o我们为新增的界面 netb 设定一个地址为 10.0.1.1。用这个在小网络上也未尝不可�o只是当您踏上采金旅程之际�o您或需用其它 IP 范围来给 tunneling 界面就是了(例如在此范例中�o您可以使用 10.0.3.0)。

在第 4 行�o我们为网络 B 设定好 router。请留意�o此处使用的 netmask 表示法并不一样。如果您不太了解其意所在�o可以这样来理解�s将 netmask 换算为二进制(binary)�o然后数一数有多少个 1 就是了。如果您连这个也不会�o万一又想知道�o那就这样强记即可�s255.0.0.0 是 /8�p255.255.0.0 是 /16�p还有 255.255.255.0 是 /24�p而 255.255.253.0 则是 /23。

够了真是的�o还是让我们看看网络 B 的 router 吧。

ip tunnel add neta mode gre remote 172.16.17.18 local 172.19.20.21 ttl 255

ip link set neta up

ip addr add 10.0.2.1 dev neta

ip route add 10.0.1.0/24 dev neta

假如您要拿掉 router A 上的 tunnel�o则�s

ip link set netb down

ip tunnel del netb

当然�o您也可以替 router B 将 netb 换成 neta。

GRE tunnels 目前所选用的 tunneling 类型。它已成标准并且也被广泛的移植到 Linux 社群之?nbsp;�o诚是美事一桩。

5.4 Userland tunnels

在核心之?nbsp;�o还有成打形形色色的 tunneling 实作�o绝非夸张之谈。其中表表者非 PPP 和 PPTP 莫属�o然而其它的也为数众多 (有的为专属的�o有的是保密的�o有的甚至不是使用 IP)�o不过�o这些实在超过本 HOWTO 的范畴了。

你可能感兴趣的:(笔记,ifconfig,gre,通道,Tunnel)