tricks

  • 慎用iptables -F

    在清除规则之前,请先确认Chain INPUT的默认poliy,假如是:Chain INPUT (policy DROP 0 packets, 0 bytes),则需要先iptables -P INPUT ACCEPT,然后iptables -F,否则会把自己锁在系统之外。

  • 涉及的网卡需启用

    在测试的过程中,发现防火墙节点的tun0还没起来,导致管理节点执行make install失败。将tinc配置好并启动后(连带启动tun0网卡),再make install就成功了。

  • log

    选用shorewall/shorewall-lite的一个重要原因是shorewall log可根据`源zone+目的zones`分组,使得管理员可以迅速定位出错的规则。举个例子:

    从lab中telnet corp的tinc vpn地址失败,于是查看双方的log日志,lab的日志无异样,corp则找到蛛丝马迹:

    $ sudo tail -f /var/log/ulogd.syslogemu | grep 10.8.0.65
      Sep  3 13:27:14 corp Shorewall:vpn2fw:REJECT: IN=tun0 OUT= MAC= SRC=10.8.0.1 DST=10.8.0.65 LEN=60 TOS=10 PREC=0x00 TTL=64 ID=19084 DF PROTO=TCP SPT=41748 DPT=23 SEQ=1825983957 ACK=0 WINDOW=5840 SYN URGP=0

    该log表明,10.8.0.1 telnet 10.8.0.65不满足vpn2fw的policy或rules,于是,我们只要在/etc/shorewall/export/rb450g/rules中的vpn2fw区域添加一条TELNET(ACCEPT) vpn $FW即可。

    shorewall的log配置
    debian
    $ sudo apt-get update
    $ sudo apt-get install iptables-mod-ulog kmod-ipt-ulog ulogd ulogd-mod-extra
    $ sudo /etc/init.d/ulogd start
    OpenWRT
    # opkg update
    # opkg install iptables-mod-ulog kmod-ipt-ulog ulogd ulogd-mod-extra
    # /etc/init.d/ulogd start

    排错时再开启ulogd 默认情况下,会将log写到/var/log/ulogd.syslogemu中。

性能调优

User1与lab之间的scp传输速率仅为1MB/s,速度很慢,尝试着对tinc进行调优:

  1. 调整加密参数(无效)

    /etc/tinc/mgmt/tinc.conf
    #Cipher = none
    #Compression = 0
    #Digest = none

    然后重启,无效,估计是因为隧道跑在tcp上,而以上3个参数只对udp起作用。

  2. 调整iptables参数(无效)

    /etc/tinc/mgmt/tinc-up
    ip link set mtu 1350 dev $INTERFACE
    iptables -A FORWARD -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

    也没什么作用。

  3. 调整nice参数(无效)

    nice -n -20 tincd -n mgmt -d3

    没什么用。

  4. 改为udp(无效)

    限制tcp:655端口,强制tincd通过udp连接,失败

    $ sudo iptables -A INPUT -i eth0 -p tcp --destion-port 655 -j DROP

    原因可能是因为lab和User2都在防火墙在之后,虽然是1:1映射,但仍然无法建立udp连接。

也许作者已经把以上几种性能调优的方式在源代码中实现了。

关于移动宽带

由于运营商的不对称管制,导致移动宽带用户的互联网访问感知很差,原因是大部分的IDC资源均在电信侧。为了缓解这种矛盾,移动公司将部分互联网流量通过第三方通道流向chinanet,使用感知得到了提升,然而却给终端用户带来一些麻烦,特别是无法正常使用动态域名。原因是:

  1. 由于通过不同链路出去,故拥有多个互联网IP地址;

  2. 第三方提供的互联网ip只允许outbound,不允许inbound,甚至禁ping。

好在tinc既可以做server,也可以做client。当作为client的时候,本机的hosts文件中的Address即便不是真实的,也无关紧要。因而移动宽带用户即便没有使用动态域名解析,也能正常使用tinc client。