联系电话: 18171260050

技术文档

  • 13,Nov,2024

在 Linux 下使用 tinc 桥接以太网段

示例:在 Linux 下使用 tinc 桥接以太网段
通常,在默认路由器模式下,tinc 将仅隧道传输 IPv4 和 IPv6 单播数据包。但是,自 1.0pre5 以来,有一个选项可以让 tinc 守护程序充当交换机或集线器(使用 Mode 配置变量)。此模式对于 tinc 传递非基于 IP 的协议(NetBEUI、AppleTalk、IPX 等)以及允许某些应用程序(没有 WINS 服务器的 Windows“网络邻居”等)中的基于广播的功能在使用 tinc 创建的 VPN 上是必需的。

在交换机和集线器模式下,广播数据包会广播到其他守护进程,并且(在交换机模式下)MAC 地址会从其他 tinc 守护进程动态学习,以便路由数据包。在这些模式下,tinc 可用作两个或多个以太网段之间的桥梁。

桥接允许 VPN 中的所有节点共享同一子网。但是,如果这是桥接的唯一原因,并且您不需要隧道传输广播或非 IP 数据包,那么您也可以使用代理 ARP来代替桥接。

概述
网络设置如下:

两侧的内部网络均为 192.168.0.0/16
主机自身在内网的IP地址为192.168.10.20
每个网段的网关都有一个外部接口 eth0 和一个内部接口 eth1。此外,还将创建一个名为“bridge”的桥接接口,并将内部接口设为此桥接的从属接口。tinc 使用的虚拟网络接口也将是从属接口。内核配置除了手册的配置内核部分中描述的标准内核配置外,还需要将桥接设备添加到内核配置中。

要将桥接设备添加到 Linux 2.4.0 及更高版本的内核,请选择“网络选项”下的 802.1d 以太网桥接选项。您可以将此选项编译为模块,也可以将其构建到内核中。接口配置交换机和集线器模式要求 tinc VPN 的两侧都包含在同一子网中(在此示例中,子网为 192.168.0.0/16)。这与用实际交换机或集线器替换 tinc 所需的配置没有区别。

host# brctl addbr bridge
host# ifconfig bridge 192.168.10.20 netmask 255.255.0.0

host# ifconfig eth1 0.0.0.0
host# brctl addif bridge eth1
host# ifconfig eth1 up

After starting tinc:

host# brctl show
bridge name     bridge id               STP enabled     interfaces
bridge          8000.005004003002       yes             eth1
                                                        vpn

host# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:20:30:40:50:60
          inet addr:123.234.123.42  Bcast:123.234.123.255  Mask:255.255.255.0
          UP BROADCAST RUNNING  MTU:1500  Metric:1
          ...

eth1      Link encap:Ethernet  HWaddr 00:11:22:33:44:55
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          ...

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:3856  Metric:1
          ...

bridge    Link encap:Ethernet  HWaddr  00:11:22:33:44:55
          inet addr:192.168.10.20  Bcast:192.168.255.255  Mask:255.255.0.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

vpn       Link encap:Ethernet  HWaddr 00:11:22:33:44:55
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          ...

host# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
123.234.123.0   *               255.255.255.0   U     0      0        0 eth0
192.168.0.0     *               255.255.0.0     U     0      0        0 bridge
default         123.234.123.1   0.0.0.0         UG    0      0        0 eth0
tinc 的配置
请注意,交换机和集线器模式不使用主机文件中的 Subnet 变量。相反,桥接接口收到的任何数据包都将传递到 TUN/TAP 设备进行处理。如果您的 tinc 实例在集线器模式下运行,则所有数据包都将转发到远程 tinc 实例。在交换机模式下,tinc 维护一个 ARP 缓存,以确定是否应将任何收到的数据包转发到远程 tinc 实例。

host# cat /etc/tinc/vpn/tinc.conf
Name = segment1
Mode = switch
ConnectTo = segment2

host# cat /etc/tinc/vpn/tinc-up
#!/bin/sh

ifconfig $INTERFACE 0.0.0.0
brctl addif bridge $INTERFACE
ifconfig $INTERFACE up

host# ls /etc/tinc/vpn/hosts
segment1  segment2  ...

host# cat /etc/tinc/vpn/hosts/segment1
Address = 123.234.123.42
-----BEGIN RSA PUBLIC KEY-----
...
-----END RSA PUBLIC KEY-----

host# cat /etc/tinc/vpn/hosts/segment2
Address = 200.201.202.203
-----BEGIN RSA PUBLIC KEY-----
...
-----END RSA PUBLIC KEY-----
附加配置
如果添加到网桥的以太网接口用于默认路由,则需要重新添加默认路由。

如果您希望能够在桥接接口上过滤数据包,则需要一个支持ebtables的内核。更多信息有关 Linux 桥接的更多信息,请参阅 bridge-utils 主页。