本项目一共尝试了2种模式的3种不同组合,每种组合均有适合的应用场景:

  1. 路由模式+静态路由

    • 少量节点,譬如实现公司的服务器和家里笔记本两点的互联;

    • 大量节点,但仅限于节点之间互相通信,譬如网络游戏,游戏主机同时扮演tinc node角色;

  2. 交换模式+动态路由

    • 大量节点,节点内主机参与通信,同时管理员拥有节点内网的IP地址规划和控制核心路由器的权限;

  3. 路由模式+NAT

    • 大量节点,节点内主机参与通信,但管理员缺乏或仅拥有少部分节点内网IP地址规划和控制核心路由器的权限;

总得来说,路由模式的效率更高,broadcast被阻断;switch模式更方便,无需配置节点路由。

在讨论之前,先了解一下相关术语和网络情况:

术语

tinc节点/网关

tinc节点/网关指的是运行tinc的主机或无线路由器,整个系列中简称为节点。

tinc公网节点

由于tinc支持nat,所以并非所有节点都有公网ip地址,对于私网tinc节点而言,它只能发起连接,而无法被直接连接。

tinc桥接节点

假如两个节点之间无法直接访问,需要通过第三个节点作为跳板,则第三个节点称之为桥接节点。譬如本文中的corp节点。

tinc节点内网

tinc主机下挂的内部子网;

网络情况

节点名称 节点性质 互联网IP 防火墙控制权限[1] 防内网网

home

私网节点

dhcp

192.168.44.0/24

corp

桥接节点

211.x.x.189

192.168.44.0/24[2]

lab

公网节点

221.x.x.188

  • 192.168.33.0/24

  • 192.168.55.0/24

  • 192.168.66.0/24

  • 192.168.88.0/24

User1

公网节点

211.173.x.42

  • 10.168.1.0/24

  • 10.168.2.0/24

  • 10.1.0.0/24

  • 10.2.0.0/24

  • 10.3.0.0/16

User2

私网节点

10.199.x.197

  • 10.10.115.0/24

  • 10.10.2.0/24

  • 10.10.3.0/24

下面逐一讨论3种应用场景。

路由模式+静态路由

以lab和User1为例,这两个节点均有静态互联网IP,节点OS均为debian。

lab

  1. 创建一个network

    $ sudo mkdir -p /etc/tinc/mgmt/hosts

    tinc可以同时开启多个vpn进程,每个进程的相关配置存放到一个被称为network id的文件夹中,本文的network id取名为mgmt。

  2. 生成本机的hosts文件

    $ sudo echo <<'EOF' > /etc/tinc/mgmt/hosts/lab
    Address = 221.x.x.165
    
    ## vpn subnet
    Subnet = 10.9.1.1/24
    
    ## lab's internal subnet
    Subnet = 192.168.33.0/24
    Subnet = 192.168.66.0/24
    EOF
  3. 生成证书

    $ sudo tincd -n mgmt -K4096

    tinc将会提示公私钥的存放位置,默认情况下,私钥以独立文件方式存放在/etc/tinc/<network id>目录,公钥会附在hosts文件末尾。最终的结果如下:

    $ sudo cat /etc/tinc/mgmt/hosts/lab
    Address = 221.xx.xx.165
    
    ## vpn subnet
    Subnet = 10.9.1.1/24
    
    ## lab's internal subnet
    Subnet = 192.168.33.0/24
    Subnet = 192.168.66.0/24
    
    -----BEGIN RSA PUBLIC KEY-----
    ...
    -----END RSA PUBLIC KEY-----
  4. 生成tinc.conf

    $ sudo echo <<'EOF' > /etc/tinc/mgmt/tinc.conf
    Name = lab
    AddressFamily = ipv4
    ConnectTo = User1
    Interface = tun0
    EOF
  5. 创建tinc-up脚本

    $ sudo echo <<'EOF' > /etc/tinc/mgmt/tinc-up
    #!/bin/sh
    
    User1_VIP="10.9.1.2"
    lab_VIP="10.9.1.1"
    
    ip link set $INTERFACE up
    ip address add dev $INTERFACE ${lab_VIP}/24
    
    ip route add $User1_VIP via $lab_VIP
    
    ## to User1's internal subnet
    ip route add 10.168.1.0/24 via $User1_VIP
    ip route add 10.168.9.0/24 via $User1_VIP
    ip route add 10.1.0.0/24 via $User1_VIP
    ip route add 10.2.0.0/24 via $User1_VIP
    ip route add 10.3.0.0/16 via $User1_VIP
    ip route add 192.168.200.0/24 via $User1_VIP
    EOF
    1. OS需添加相关静态路由,tinc才能转发数据包;

    2. 先添加一条点对点路由,然后再将对端网段指向对端tinc IP地址;

User1

  1. 创建hosts文件

    $ sudo echo <<'EOF' > /etc/tinc/mgmt/hosts/User1
    Address = 221.xx.xx.44
    # VPN subnet
    Subnet = 10.9.1.2/24
    # User1's internal subnet
    Subnet = 10.168.1.0/24
    Subnet = 10.168.9.0/24
    Subnet = 10.1.0.0/24
    Subnet = 10.2.0.0/24
    Subnet = 10.3.0.0/16
    Subnet = 192.168.200.0/24
    EOF
  2. 生成证书

    $ sudo tincd -n mgmt -K4096
  3. 创建tinc-up脚本

    $ sudo echo <<'EOF' > /etc/tinc/mgmt/tinc-up
    #!/bin/sh
    
    User1_VIP="10.9.1.2"
    lab_VIP="10.9.1.1"
    
    ip link set $INTERFACE up
    ip address add dev $INTERFACE ${User1_VIP}/24
    
    ip route add $lab_VIP via $User1_VIP
    
    # to lab's real subnet
    ip route add 192.168.33.0/24 via $lab_VIP
    ip route add 192.168.55.0/24 via $lab_VIP
    ip route add 192.168.66.0/24 via $lab_VIP
    ip route add 192.168.88.0/24 via $lab_VIP
    EOF

至此,完成User1的配置。

在启动前,需要把hosts文件分别拷贝到对方的hosts目录下:

User1
$ sudo scp /etc/tinc/mgmt/hosts/User1 $lab_internet_ip:/etc/tinc/mgmt/hosts (1)
1 $lab_internet_ip是lab节点的公网ip地址
lab
$ sudo scp /etc/tinc/mgmt/hosts/lab $User1_internet_ip:/etc/tinc/mgmt/hosts

最后,分别启动lab和User1的tinc。这样就在lab和User1之间创建了一条加密隧道,非常简单。

路由模式+静态路由模式的一个缺陷就是,随着节点的增多,需要手工配置的路由越来越多,维护工作量也越来越大。下面是corp节点的tinc-up

$ sudo cat /etc/tinc/mgmt/tinc-up
#!/usr/sh
lab_VIP   = "10.9.1.1"
User1_VIP = "10.9.1.2"
home_VIP  = "10.9.1.3"
User2_VIP = "10.9.1.4"
corp_VIP  = "10.9.1.5"

ip link set $INTERFACE up
ip address add dev $INTERFACE ${corp_VIP}/24

ip route add $User1_VIP via $corp_VIP
ip route add $lab_VIP via $corp_VIP
ip route add $User2_VIP via $corp_VIP
ip route add $home_VIP via $corp_VIP


# to User1's internal subnet
ip route add 10.168.1.0/24 via $User1_VIP
ip route add 10.168.9.0/24 via $User1_VIP
ip route add 10.1.0.0/24 via $User1_VIP
ip route add 10.2.0.0/24 via $User1_VIP
ip route add 10.3.0.0/16 via $User1_VIP
ip route add 192.168.200.0/24 via $User1_VIP

# to lab's internal subnet
ip route add 192.168.33.0/24 via $lab_VIP
ip route add 192.168.55.0/24 via $lab_VIP
ip route add 192.168.66.0/24 via $lab_VIP
ip route add 192.168.88.0/24 via $lab_VIP

# to User2's internal subnet
ip route add 10.10.115.0/24 via $User2_VIP
ip route add 10.10.80.0/24 via $User2_VIP
ip route add 10.10.84.0/24 via $User2_VIP
ip route add 10.10.88.0/24 via $User2_VIP

# to home's internal subnet
ip route add 192.168.22.0/24 via $home_VIP

配置冗长,这还不算完,各节点的核心路由器也要添加相应的静态路由,它们的内网方能互相通信。这就不能忍了,之所以抛弃OpenVPN而选择tinc,不就是看到它自我标榜的easily expand吗?怎么办呢?上动态路由吧。

交换模式+动态路由

动态路由是一个庞大的话题,因而本文就不误人子弟了,有需要的读者请自行参考cisco出的通俗读物。

现在,我们需要在所有节点上跑动态路由协议,它们之间互相协商,根据链路的通断动态调整路由指向,最后形成一张临时路由表。有了这个功能,我们就不需要再手工维护路由表了。

tinc配置

引入动态路由后,tinc-up的配置得到极大的简化:

lab
$ sudo cat /etc/tinc/mgmt/tinc-up
#!/bin/sh
ip link set $INTERFACE up
ip address add dev $INTERFACE 10.9.1.1
corp
$ cat /etc/tinc/mgmt/tinc-up
#!/bin/sh
ip link set $INTERFACE up
ip address add dev $INTERFACE 10.9.1.5

然而,引入动态路由后,tinc.conf还需要手工添加Subnet=本节点内网,各节点之间才能正常的通信。解决办法是将tinc的组网模式需要从router变更为switch(在tinc.conf中添加Mode = switch),switch的性能比route要差一些,因为还要处理broadcast和arp请求等数据包,但是可以不用再费心去维护各节点的子网信息了。以一点性能损失来换取维护的便利还是值得的。

全部节点的tinc.conftinc-up都得到简化,顿时感觉清爽了不少!

动态路由

动态路由包含路由平台和动态路由协议。路由平台运行在linux服务器上,而动态路由协议则运行在路由平台上,可以将运行着路由平台的服务器看作一台路由器。

选择

每次选择开源软件都很痛苦,因为不知道它能活多久。譬如我之前为n2n歌功颂德,没几天,作者就说没时间维护,请关注fork,这不是坑爹吗?幸好开源的路由平台也没有太多的选择:quagga or bird。10年前曾试过zebra,稳定性实在太差,所以对quagga[3]也不太感冒,加上bird已经在欧洲多个Internet exchanger部署,所以就选了bird。bird目前仅支持传统的RIP、BGP、OSPF,尚不支持babel、olsr等mesh network协议,因而路由协议就选了ospf,没有选择也是一种幸福。

安装

debian
$ sudo apt-get update && aptitude -t squeeze-backports install bird
openwrt
# opkg update && opkg install bird4 birdc4

配置

这里以labcorp为例:

lab

/etc/bird.conf
log syslog { debug, trace, info, remote, warning, error, auth, fatal, bug };
router id 10.9.1.1;
debug protocols all;

protocol kernel {
        persist;                # Don't remove routes on bird shutdown
        scan time 20;           # Scan kernel routing table every 20 seconds
        export all;             # Default is export none
}

protocol device {
        scan time 10;           # Scan interfaces every 10 seconds
}

protocol direct {
        interface "eth0";
}

protocol static {
       debug all;
}

protocol ospf {
        import all;
        export all;
        area 0.0.0.0 {
                interface "tun0" {
                        hello 9;
                        retransmit 6;
                        cost 10;
                        transmit delay 5;
                        dead count 60;
                        wait 10;
                        type pointopoint;
                };
        };
}

corp

bird的配置与lab几乎一致,区别是

route id 10.9.1.5;
protocol direct {
        interface "br-lan", "wlan0";
}

protocol direct的意思是将直连路由塞入ospf中参与协商,换句话说,通告给相连路由器,我这里有192.168.44.0/24192.168.77.0/24这两个子网,请将目标地址属于这两个子网的数据包丢过来给我处理吧。

常用指令

  • 启动

    debian
    $ sudo /etc/init.d/bird start
    openwrt
    $ sudo /etc/init.d/bird4 start
  • 自启动

    debian
    $ sudo /etc/init.d/bird enable
    openwrt
    $ sudo /etc/init.d/bird4 enable
  • 查看状态

    可以通过birdc/birdc4来查看bird平台状态

    $ sudo birdc4
    BIRD 1.3.7 ready.
    bird> show route
    ...
    10.2.0.0/24        via 10.9.1.253 on tun0 [ospf1 Jul28] * E2 (150/10/10000) [10.9.1.2]
    10.3.0.0/16        via 10.9.1.253 on tun0 [ospf1 Jul28] * E2 (150/10/10000) [10.9.1.2]
    10.1.0.0/24        via 10.9.1.253 on tun0 [ospf1 Jul28] * E2 (150/10/10000) [10.9.1.2]
    10.10.10.0/24      via 10.9.1.253 on tun0 [ospf1 Jul28] * E2 (150/10/10000) [10.9.1.2]
    192.168.33.0/24    via 10.9.1.254 on tun0 [ospf1 Jul29] * E2 (150/10/10000) [10.9.1.1]
    192.168.66.0/24    via 10.9.1.254 on tun0 [ospf1 Jul29] * E2 (150/10/10000) [10.9.1.1]
    10.10.115.0/25     via 10.9.1.251 on tun0 [ospf1 Jul29] * E2 (150/10/10000) [10.9.1.4]
    10.10.80.0/24      via 10.9.1.251 on tun0 [ospf1 Jul29] ! E2 (150/10/10000) [10.9.1.4]
    10.10.84.0/24      via 10.9.1.251 on tun0 [ospf1 Jul29] ! E2 (150/10/10000) [10.9.1.4]
    10.10.88.0/24      via 10.9.1.251 on tun0 [ospf1 Jul29] ! E2 (150/10/10000) [10.9.1.4]
    10.168.9.0/24      via 10.9.1.253 on tun0 [ospf1 Jul28] * E2 (150/10/10000) [10.9.1.4]
    10.168.1.0/24      via 10.9.1.253 on tun0 [ospf1 Jul28] * E2 (150/10/10000) [10.9.1.4]
    bird>exit

    再用ip route show查看,就会发现bird已经将路由写入到kernel路由表中了,每条路由后面带有proto bird的后缀。需要说明的是,手工设置的路由优先级最高,bird无法覆盖。

  • log

    $ sudo tail -f /var/log/syslog | grep bird

    动态路由的引入极大地拓展tinc的应用场景,譬如在全国拥有大量分支机构的企业,就可以利用“交换+动态路由”模式在互联网上构建一张灵活的full mesh network。当然,tinc+动态路由并非万能,需满足以下条件:

    • 各节点的IP地址段统一分配;

    • 各节点内网的核心路由器/交换机也需开启动态路由协议。

      否则会出现:

    • 节点的IP地址段冲突;

    • 各节点核心路由器/交换机的路由表需手工维护,工作量大;

关于静态路由管理

倘若希望lab和User1之间内部网段的互访,各自核心交换机需将对方网段指向本节点的tinc网关:

huawei-S5328(lab核心交换机)
ip route 192.168.44.0 255.255.255.0 <lab lan ip> desc to corp
ip route 192.168.77.0 255.255.255.0 <lab lan ip> desc to corp

ip route 10.1.0.0 255.255.255.0 <User1 lan ip> desc to User1
ip route 10.2.0.0 255.255.255.0 <User1 lan ip> desc to User1
ip route 10.3.0.0 255.255.0.0 <User1 lan ip> desc to User1
ip route 10.168.1.0 255.255.255.0 <User1 lan ip> desc to User1
ip route 10.168.9.0 255.255.255.0 <User1 lan ip> desc to User1
ip route 192.168.200.0 255.255.255.0 <User1 lan ip> desc to User1

ip route 10.9.0.0 255.255.0.0 <lab lan ip> desc to local tinc gw
h3c-S5500(User1节点核心交换机)
ip route 192.168.44.0 255.255.255.0 <User1 lan ip> desc to corp
ip route 192.168.77.0 255.255.255.0 <User1 lan ip> desc to corp

ip route 192.168.33.0 255.255.255.0 <User1 lan ip> desc to lab
ip route 192.168.55.0 255.255.255.0 <User1 lan ip> desc to lab
ip route 192.168.66.0 255.255.255.0 <User1 lan ip> desc to lab
ip route 192.168.88.0 255.255.255.0 <User1 lan ip> desc to lab
ip route 10.9.0.0 255.255.0.0 <User1 lan ip> desc to local tinc gw

在本项目中,我无权改动corp、User1、User2这三个节点的网络规划,所以交换+动态路由注定只是匆匆过客。虽然它的出现给tinc带来了无限的可能,但此时我只能无情地抛弃它,重新寻找新的解决方案。不久,NAT在不经意中出现了。

路由+NAT

前面提到希望通过NAT的方式来“解决IP地址冲突”和“缓解节点核心路由器路由表维护工作”这两个问题,其思路是:

将一个B类(10.9.0.0/16)切割成多个C类网段,每个节点分配一个C类子网段,子网段的第一个可用IP地址作为该节点的接口IP地址,剩余的以1:1 NAT方式映射至节点内主机。

假设vpn地址分配&映射表如下:

Table 1. vpn地址分配&映射表

节点名称

vpn地址段

节点ip

lab

10.9.1.0/24

10.9.1.1

User1

10.9.2.0/24

10.9.2.1

home

10.9.3.0/24

10.9.3.1

User2

10.9.4.0/24

10.9.4.1

corp

10.9.5.0/24

10.9.5.1

下面以monitor@lab与storage@User2这两台主机之间的通信为例,monitor和storage的IP地址均为192.168.33.78,处于冲突状态,原本无法相互通信。

使用1:1 NAT之后:

  • lab:monitor的tinc IP地址为10.9.1.2

  • User2:storage的tinc IP地址为10.9.4.97

当lab:monitor访问User2:storage时,数据包IP层为src ip: 192.168.33.78/dst ip: 10.9.4.97,当数据包经过lab网关时,src ip被替换成10.9.1.2,当数据包到达User2网关时,dst ip被替换成10.10.115.3,数据包IP层变成了src ip: 10.9.1.2/dst ip: 192.168.33.78,最后到达storage;

当User2:storage访问lab:monitor时,数据包IP层为src ip: 192.168.33.78/dst ip: 10.9.1.2,当数据包经过User2网关时,src ip被替换成10.9.4.97,当数据包达到lab网关时,dst ip被替换成192.168.33.78,数据包IP层变成了src ip: 10.9.4.97/dst ip: 192.168.33.78,最后到达monitor;

  • 在vpn中,源和目标地址均为10.9.0.0/16,充分利用了tinc的auto routing功能特性,实现tinc vpn的路由不需要配置路由;

  • 在节点内,核心路由器只需要配置一条静态路由,将10.9.0.0/16指向本节点网关的内网IP即可。

也就是说,利用1:1 NAT技术可以实现:

  1. 规避节点内网路由;

  2. 规避各节点内网段的冲突问题;

  3. 减轻节点内的核心路由器路由表的维护工作;

1:1 NAT需要利用到netfilter中的masq技术,通俗点来说,就是要在节点网关上利用iptables对ip进行伪装。在增加iptables/masq之前,先调整tinc的配置。

tinc配置

tinc需要修改host和tinc.conf这两个文件:

host文件

  • lab

    $ sudo cat /etc/tinc/mgmt/hosts/lab
    ------------8<------------
    Address = 221.xx.xx.165 (1)
    Subnet = 10.9.1.0/24
    ------------>8------------
    1 两个节点网关只需要有一个公网IP即可,第二个公网IP可以随便填,甚至删掉address这个选项都可以。
  • corp

    $ sudo cat /etc/tinc/mgmt/hosts/corp
    ------------8<------------
    Address = 211.xx.xx.189 (1)
    Subnet = 10.9.5.0/24
    ------------>8------------
    1 两个节点网关只需要有一个公网IP即可,第二个公网IP可以随便填,甚至删掉address这个选项都可以。

tinc.conf

  • lab

    $ sudo cat /etc/tinc/mgmt/tinc.conf
    ------------8<------------
    Mode = route (1)
    ------------>8------------
    1 在route模式下,tinc会自动将目标地址为10.9.0.0/16网段丢到10.9.3.1。
  • corp

    $ sudo cat /etc/tinc/mgmt/tinc.conf
    ------------8<------------
    Mode = route (1)
    ------------>8------------
    1 在route模式下,tinc会自动将目标地址为10.8.0.0/24网段丢到10.8.0.65。

防火墙

毫无疑问,需要在各节点启用iptables/netfilter,但自从用了pf后,我对iptables的语法深恶痛绝,故在linux安装了shorewall,OpenWRT则用了shorewall-lite。

下面分别以lab和corp为例说明shorewall和shorewall-lite的配置,关于这两者的安装详见[shorewall]和[shorewall-lite]。

shorewall主要是要理解zones,policy和rules,具体的就不献丑了,官网文档很详尽。另外,为了更好的排错,我用ulogd替代了syslog,默认情况下,netfilter利用syslog来记录,一是效率低,二是跟/var/log/syslog混在一起,改用ulogd后效率更高,而且可以将日志存放在单独的文件中。

lab

shorewall的配置文件夹为/etc/shorewall

  • shorewall.conf

    # 修改以下参数:
    LOGFILE=/var/log/ulog/syslogemu.log
    LOGFORMAT=""
    # 将所有info替换成$LOG
  • params

    INT_IF=eth0
    VPN_IF=tun0
    LOG=ULOG
  • zones

    fw      firewall
    net     ipv4
    vpn     ipv4
  • interfaces

    net     $INT_IF            dhcp,tcpflags,logmartians,nosmurfs,sourceroute=0
    vpn     $VPN_IF            dhcp,tcpflags,logmartians,nosmurfs,sourceroute=0
  • policy

    $FW             net             ACCEPT
    $FW             vpn             ACCEPT
    vpn             $FW             ACCEPT
    net             all             DROP            $LOG
    all             all             REJECT          $LOG
  • rules

    ###############
    # net2fw
    
    # allow ssh,http,https,655,80,2003 from net to $FW
    ACCEPT          net             $FW             tcp             ssh,http,https,2003
    ACCEPT          net             $FW             udp,tcp         655
    
    ###############
    # vpn2net
    
    # allow ssh,http from USER1 to LAB
    ACCEPT     vpn:10.9.2.0/24    net:192.168.33.0/24,192.168.66.0/24  tcp     ssh,http
    
    # allow all from CORP to LAB
    ACCEPT          vpn:10.9.5.0/24        net:192.168.33.0/24     all
    ACCEPT          vpn:10.9.5.0/24        net:192.168.55.0/24     all
    ACCEPT          vpn:10.9.5.0/24        net:192.168.66.0/24     all
    ACCEPT          vpn:10.9.5.0/24        net:192.168.88.0/24     all
    ACCEPT          vpn:10.9.5.0/24        net:192.168.100.0/24    all
    ACCEPT          vpn:10.9.5.0/24        net:172.16.33.0/24      all
    
    ###############
    # net2vpn
    
    ACCEPT  net:192.168.33.0/24     vpn     all
    ACCEPT  net:192.168.66.0/24     vpn     all
    ACCEPT  net:172.16.33.0/24      vpn     all
    
    ###############
    # all2all
    
    Ping(ACCEPT)   all             all
  • nat

    10.9.2.2       tun0            192.168.33.78     No               No
    10.9.2.3       tun0            192.168.33.79     No               No
    10.9.2.4       tun0            192.168.33.80     No               No
    10.9.2.5       tun0            192.168.33.81     No               No
    10.9.2.6       tun0            192.168.66.21      No               No
    10.9.2.7       tun0            192.168.66.22      No               No
    10.9.2.8       tun0            192.168.66.23      No               No
    10.9.2.9       tun0            192.168.55.120     No               No
    10.9.2.10      tun0            192.168.88.120     No               No

最后重启shorewall

$ sudo shorewall check
$ sudo shorewall restart
$ sudo /etc/init.d/ulogd start

corp

  • params

    WAN_IF=eth0
    LAN_IF=br-lan
    OA_IF=br-oa
    VPN_IF=tun0
    LOG=ULOG
  • zones

    fw      firewall
    oa      ipv4
    lan     ipv4
    wan     ipv4
    vpn     ipv4
  • interfaces

    wan             $WAN_IF                 dhcp,tcpflags,logmartians,nosmurfs,sourceroute=0
    lan             $LAN_IF                 tcpflags,logmartians,nosmurfs,sourceroute=0
    vpn             $VPN_IF                 tcpflags,logmartians,nosmurfs,sourceroute=0
    oa              $OA_IF                  tcpflags,logmartians,nosmurfs,sourceroute=0 ```
  • policy

    $FW     all     ACCEPT
    lan     all     ACCEPT
    wan     all     DROP            $LOG    10/sec:40
    all     all     REJECT
  • rules

    SECTION NEW
    Invalid(DROP)   wan             all
    
    ###############
    # vpn2fw
    
    Ping(ACCEPT)    vpn             $FW
    SSH(ACCEPT)     vpn             $FW
    HTTP(ACCEPT)    vpn             $FW
    
    ###############
    # wan2fw
    
    ACCEPT          wan             $FW     tcp     655
    ACCEPT          wan             $FW     udp     655
    SSH(ACCEPT)     wan             $FW
  • masq

    $OA_IF          192.168.44.0/24 10.199.27.17
    $VPN_IF         192.168.44.0/24 10.9.5.1
    $WAN_IF         192.168.44.0/24 192.168.7.21
  • nat

    10.9.5.2       tun0   192.168.44.3 No   No
    10.9.5.3       tun0   192.168.44.5 No   No
    10.9.5.4       tun0   192.168.44.14 No   No
因为shorewall-lite由管理节点控制,所以请使用管理节点来管理防火墙节点的配置,包括更新及重启shorewall-lite进程,详情请参阅shorewall-lite

至此,tinc的三种部署方式均做了详细的介绍,读者可以根据自己的情况任选其一。在使用的过程中,需要注意些什么问题呢?详见tinc的日常


1. 互联网IP
2. 是的,你没有看错,跟home的内网网段相同
3. quagga是zebra的一个fork版本