自动化配置ospf

ospf的部署因为涉及交换机配置和服务器上qugga的配置,在配置的时候一般都比较麻烦。对应ospf的一些关键配置项需要在配置前协商好,比如 hello-interval 和 dead-interval如果不匹配的话是没有办法建立起邻居关系的,另外还有ospf类型(p2p or 广播类型,etc),验证的方式、密码,area ID。当前这些都是建立在网络接线没有任何问题的前提下,如果网络接线不小心接错了2根,那就更悲剧了,其中的心酸泪唯有自己遇到了才能体会。

所以要简化自己在服务器上的配置需要从2个方向入手。一是在在配置前检查接线是否有问题,二是能自动化配置的地方就搞自动化。

因为一般配置都是网工先在交换机上把ospf配置好,所以对于双上联的情况可以比较简单的抓包查看area id是否一直来判断接线是否有问题。


 tcpdump -i eth4 -nn -vv proto ospf -c1  2>/dev/null |grep Area
 tcpdump -i eth5 -nn -vv proto ospf -c1  2>/dev/null |grep Area

另外一个比较烦的是互联地址的配置,其实也可以直接抓包看到交换机的端口上的互联IP,可以推算出本地网卡应该配置的地址。


tcpdump -i eth4 -nn -vv proto ospf -c1  2>/dev/null |grep OSPFv2
tcpdump -i eth5 -nn -vv proto ospf -c1  2>/dev/null |grep OSPFv2

有了以上得到的信息其实就可以很方便写个脚本自动生互联网卡的配置文件,以及zebra、ospfd配置文件.在大批量配置ospf的时候可以事半功倍。

发表在 net | 自动化配置ospf已关闭评论

配置VM使用单独的VLAN

实际在部署虚拟化的时候我们往往都会把宿主机和VM各自的地址段单独规划。借助OpenWrt可以自己划分一下vlan。OpenWrt上设置vlan tag可以参考之前的文章。比如我的network配置文件,划分了3个VLAN(其实最好不要使用vlan 0),非默认vlan里每个lan口都是打了vlan tag:


config interface 'loopback'
    option ifname 'lo'
    option proto 'static'
    option ipaddr '127.0.0.1'
    option netmask '255.0.0.0'

config interface 'lan'
    option ifname 'eth1.0'
    option type 'bridge'
    option proto 'static'
    option ipaddr '10.0.1.1'
    option netmask '255.255.255.0'

config interface 'lan1'
    option ifname 'eth1.1'
    option type 'bridge'
    option proto 'static'
    option ipaddr '10.1.1.1'
    option netmask '255.255.255.0'

config interface 'lan2'
    option ifname 'eth1.2'
    option type 'bridge'
    option proto 'static'
    option ipaddr '10.2.1.1'
    option netmask '255.255.255.0'

config interface 'wan'
    option ifname 'eth0'

config switch 'eth1'
    option reset '1'
    option enable_vlan '1'

config switch_vlan
    option device 'eth1'
    option vlan '0'
    option ports '0 1 2t 5*'

config switch_vlan
    option device 'eth1'
    option vlan '1'
    option ports '0t 1t 2t 5*'

config switch_vlan
    option device 'eth1'
    option vlan '2'
    option ports '0t 1t 2t 5*'

config interface 'wwan'
    option proto 'dhcp'

其他还需要修改好dhcp和firewall配置文件(可以简单参考之前的文章)。
在自己笔记本上测试的,把有线网卡eth0加了vlan 2,把没有eth0放到br0网桥,eth0.2放到了br2。测试dhcp br0和br2分别获取到IP。


#/etc/network/interfaces 这个是默认的网桥配置
auto br0
    iface br0 inet dhcp
    bridge_ports eth0
    bridge_fd 0
    bridge_maxwait 0

为了测试方便也可以就直接命令行手动添加一下。


sudo vconfig add eth0 2
sudo brctl addbr br2
sudo brctl addif br2 eth0.2

如果想写到配置文件就


auto br0
    iface br0 inet dhcp
    bridge_ports eth0
    bridge_fd 0
    bridge_maxwait 0
auto br2
iface br2 inet manual
    bridge_ports eth0.2
    bridge_maxwait 0
auto br3
iface br3 inet manual
    bridge_ports eth0.3
    bridge_maxwait 0

iface eth0.2 inet manual
    vlan-raw-device eth0
iface eth0.3 inet manual
    vlan-raw-device eth0

反正就是把网卡加到1个vlan,然后把新建一个网桥,桥接一下这个网卡。

然后修改VM的配置文件,改成桥接到br2


    <interface type='bridge'>
      <mac address='52:54:00:cf:0f:f1'/>
      <source bridge='br2'/>
      <model type='virtio'/>
      <bandwidth>
        <inbound average='512' peak='550' burst='520'/>
        <outbound average='512' peak='550' burst='520'/>
      </bandwidth>

启动VM后了可以看到VM能获得的IP是10.2.1.0/24段内的了。并且是可以访问公网,说明测试OK。


root@debian:~# ifconfig
eth0      Link encap:Ethernet  HWaddr 52:54:00:cf:0f:f1  
          inet addr:10.2.1.116  Bcast:10.2.1.255  Mask:255.255.255.0
          inet6 addr: fe80::5054:ff:fecf:ff1/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:10 errors:0 dropped:0 overruns:0 frame:0
          TX packets:15 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:947 (947.0 B)  TX bytes:1326 (1.2 KiB)
发表在 KVM, net | 配置VM使用单独的VLAN已关闭评论

dns 递归时的NS选择

一个域名的权威DNS往往都有多个,有其实域名服务商或者一般的互联网大公司的NS可能非常多。那么我们的local dns做递归的时候是如何选择使用哪个NS呢。一般是根据SRTT算法来做选择。不过的软件的方式有所不同,总的来说有几种:
1. 选择RT最短的NS。
2. 平均选择RT小于一定阈值的NS。
3. 把NS参考RT和一些其他的因素进行排序,按照不同的比例进行选择。

可以参考一下这个PDF

发表在 dns | dns 递归时的NS选择已关闭评论

KVM VM在线迁移及Qos测试

做公有云的应该都能感受到比做私有云多N倍的痛苦。比如服务器硬件的问题,如果是内部的应用按理说应用都做到了无状态,随便挂几个机器基本没有任何影响,把机器下线慢慢修就行。但是对于有上十万台服务器规模的人来说,每周挂几十个机器是非常非常平常的,有时内核有bug你也无能为力,升级肯定是需要重启机器的,会对上面跑的VM造成影响,不升级就只有等死。虽然说xen和kvm都是有热迁移,但是实际效果往往差强人意,比如当每秒钟内存内读写的内容比网络速度快的时候,就永远不可能完成热迁移了,如果谁的VM上跑了个memcache之类的,基本就没法迁移。另外很多负载比较重的VM,迁移起来可能对服务的影响也比较大。

在自己的两台笔记本上测试了一下KVM的迁移,整理一下。

  1. 每台笔记本上都是跑的debian testing,先是修改/etc/network/interfaces配置一下网桥(VM都是使用桥接的形式,每个VM和笔记本获取到的IP都是1个网段)

pm@debian:~ $  cat /etc/network/interfaces
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
#allow-hotplug eth0
#NetworkManager
#iface eth0 inet dhcp
auto br0
    iface br0 inet dhcp
    bridge_ports eth0
    bridge_fd 0
    bridge_maxwait 0
  1. 安装基本的包

 aptitude install qemu-kvm libvirt-bin virt-manager virt-top
  1. 创建镜像文件,从ISO安装系统
    3.1 create image file

  qemu-img create -f qcow2 debian3.qcow2 10G

如果要调整大小,比如增大size,可以直接命令操作


qemu-img resize debian3.qcow2 +2G

3.2安装系统,sudo 运行一下脚本就可以安装了。


$ cat install_debian3.sh
virt-install \
--name=debian3 \
--os-type=linux \
--os-variant=debianwheezy \
--vcpus=2 \
--ram=1024 \
--accelerate \
--hvm \
--vnc \
--vncport=6668 \
--network=bridge=br0,mac=RANDOM,model=virtio \
--disk path=/home/pm/image/debian3.qcow2,format=qcow2,bus=virtio,cache=writeback \
--cdrom=/home/pm/downloads/debian-7.2.0-amd64-xfce-CD-1.iso
  1. virsh下启动系统,使用vnc登录进去(知道IP也可以直接ssh登录)

sudo virsh list --all
sudo virsh start debian3
sudo virsh shutdown debian3
sudo virsh edit debian3 (edit domain xml config file)
sudo virsh dumpxml debian3

配置文件的修改直接使用virsh edit操作,不要直接去改/etc/libvirt/qemu/下的内容。


sudo cat /etc/libvirt/qemu/debian3.xml
sudo virsh  define /etc/libvirt/qemu/debian3.xml
  1. 本地clone一个VM,比如从debian3 克隆一个debian0出来。

sudo virt-clone --connect=qemu:///system -o debian3 -n debian0 -f /home/pm/image/debian0.qcow2
  1. 使用migrate在线迁移(需要先打通到目标机器的SSH信任登录)
    6.1无共享存储的迁移(迁移的时候会实时传输镜像内的数据)
    在迁移的源机器上:

sudo virsh migrate --copy-storage-all --tunnelled --p2p --verbose --live   debian3 qemu+ssh://10.1.1.194/system

目标服务器的后续操作:


sudo virsh dumpxml debian3 >/etc/libvirt/qemu/debian3.xml
sudo virsh define /etc/libvirt/qemu/debian3.xml

6.2 使用NSF做共享存储的迁移
先在源机器上设置一下nfs共享,然后在目标机器上把这个目录挂载上去,需要非常注意NFS的权限,两个机器上相同 用户的用户id是否一致等等,反正有问题就看日志解决。迁移的时候比较简单:


virsh # migrate   --p2p  --tunnelled --verbose --timeout 3600 --live debian220  qemu+ssh://10.1.1.194/system
Migration: [100 %]

迁移完成后也是需要


sudo virsh dumpxml debian220 > debian220.xml && sudo virsh define debian220
  1. VM网络带宽的限制,比如限制带宽为4M可以在interface段内定义一下bandwidth。

    <interface type='bridge'>
      <mac address='52:54:00:cf:0f:f1'/>
      <source bridge='br0'/>
      <model type='virtio'/>
      <bandwidth>
        <inbound average='512' peak='550' burst='520'/>
        <outbound average='512' peak='550' burst='520'/>
      </bandwidth>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </interface>
  1. cpu资源的设置一方面可以设置VCPU的数量,另外也可以通过显示的cpu绑定,比如设置了2个VCPU但是实际都是被绑定到了1个核上

  <vcpu placement='static' cpuset='1'>2</vcpu>
  <cputune>
    <shares>2048</shares>
    <vcpupin vcpu='0' cpuset='1'/>
    <vcpupin vcpu='1' cpuset='1'/>
  </cputune>
  1. IO的资源限制
    可以使用blkdeviotune来做操作

virsh blkdeviotune debian220 vda  --read-bytes-sec 20000000 --write-bytes-sec 1000000 --total-iops-sec 80 --read-iops-sec 0 --write-iops-sec 0 --live (or --config)

virsh # help blkdeviotune
  NAME
    blkdeviotune - Set or query a block device I/O tuning parameters.

  SYNOPSIS
    blkdeviotune <domain> <device> [--total-bytes-sec <number>] [--read-bytes-sec <number>] [--write-bytes-sec <number>] [--total-iops-sec <number>] [--read-iops-sec <number>] [--write-iops-sec <number>] [--config] [--live] [--current]

  DESCRIPTION
    Set or query disk I/O parameters such as block throttling.

  OPTIONS
    [--domain] <string>  domain name, id or uuid
    [--device] <string>  block device
    --total-bytes-sec <number>  total throughput limit in bytes per second
    --read-bytes-sec <number>  read throughput limit in bytes per second
    --write-bytes-sec <number>  write throughput limit in bytes per second
    --total-iops-sec <number>  total I/O operations limit per second
    --read-iops-sec <number>  read I/O operations limit per second
    --write-iops-sec <number>  write I/O operations limit per second
    --config         affect next boot
    --live           affect running domain
    --current        affect current domain

也可以直接edit手改xml文件。


    <disk type='file' device='disk'>
      <driver name='qemu' type='qcow2' cache='writeback'/>
      <source file='/home/pm/image/debian220.qcow2'/>
      <target dev='vda' bus='virtio'/>
      <iotune>
        <read_bytes_sec>20000000</read_bytes_sec>
        <write_bytes_sec>10000000</write_bytes_sec>
        <total_iops_sec>0</total_iops_sec>
      </iotune>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
    </disk>

当iops不是瓶颈的时候(dd测试的时候可以把bs设置的大点,为了测试方便先不限制iops),限制读的速度是20M/S,写入的速度10M/S。

io_qos

  1. 配置console
    串口的配置主要是guest os内需要改很多配置
    echo “ttyS0″ >> /etc/securetty
    在/etc/grub.conf文件中为内核添加参数: console=ttyS0
    在/etc/inittab中添加agetty:
    S0:12345:respawn:/sbin/agetty ttyS0 115200
  2. 热插拔USB设备
    以我的一个罗技的无线鼠标接收器测试

pm@debian:~ $ lsusb |grep Logitech
Bus 001 Device 006: ID 046d:c52b Logitech, Inc. Unifying Receiver

新建一个xml文件


pm@debian:~ $ cat usb.xml
<hostdev mode='subsystem' type='usb'>
  <source>
    <vendor id='0x046d'/>
    <product id='0xc52b'/>
  </source>
</hostdev>

virsh # attach-device  debian220 usb.xml
Device attached successfully
#动态卸载命令
virsh # detach-device debian220 usb.xml
Device detached successfully
# 保存到配置文件内
virsh # attach-device  debian220 usb.xml  --config
Device attached successfully
#如果当前USB设备已经attach到MV内,并且配置文件也有改设备,可以把设备从配置文件剔除。
virsh # detach-device  debian220 usb.xml  --config
Device detached successfully
--config保持到配置后可以dumpxml 看到新增了相应的配置段。
    <hostdev mode='subsystem' type='usb' managed='no'>
      <source>
        <vendor id='0x046d'/>
        <product id='0xc52b'/>
      </source>
    </hostdev>

在VM内对比加载和卸载前后


root@debian:~# lsusb
Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 002: ID 0627:0001 Adomax Technology Co., Ltd
Bus 001 Device 003: ID 0409:55aa NEC Corp. Hub
Bus 001 Device 004: ID 046d:c52b Logitech, Inc. Unifying Receiver
root@debian:~# lsusb
Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 002: ID 0627:0001 Adomax Technology Co., Ltd
Bus 001 Device 003: ID 0409:55aa NEC Corp. Hub

其他需要注意的事项:
1. 如果只是自己的机器上跑VM玩玩,IO方面可以使用virtio,并且配置cache的模式为writeback,不过配置成writeback后不能进行在线迁移了,因为这样可能出现一部分数据还在内存中没有写到磁盘,所以不允许这个cache模式下的迁移。我自己实际测试的时候是virsh edit把cache模式改为none了。否则会有报错:


virsh #  migrate   --p2p  --tunnelled --verbose --timeout 3600 --live debian220  qemu+ssh://10.1.1.194/system
error: Unsafe migration: Migration may lead to data corruption if disks use cache != none

cache=writeback,bus=virtio
2. 网卡也设置使用virtio,性能会好很多。
mode=virtio
3. 如果要给VM添加其他的设备,比如USB设备之类的可以使用attach-device直接把定义到一个xml文件的设备添加进去
4. qcow2格式的镜像文件在迁移的时候不只是迁移了使用的块。。自己创建的10G的镜像就直接传输了10G的数据,这个在实际线上估计接受不了,传输量太大,签约的时候目标机器的IO压力会非常大。

参考文档:
1. http://libvirt.org/docs.html
2. http://www.linux-kvm.org/page/HOWTO

发表在 KVM | KVM VM在线迁移及Qos测试已关闭评论

dns解析超时的排查

这几天有开发同学反馈说是线上的应用dns解析总是失败,我自己测试了连续dig 1000次都是正常的。今天也把合作方的同学一起叫上了。因为之前是看对方有的CNAME设置的TTL是0,造成每次需要重新解析,dns服务器没有办法做cache。

今天排除了很久,后来看了线上的日志才发现问题的本质是业务量非常小,每天就几十笔调用,即便对方把TTL改成60后,实际每次应用服务器查询dns的时候,dns服务器都是需要重新递归一次(每次两三秒),所有可能没有解析出来应用都已经报错了。

这个也没有啥好的解决的方式,要么应用把这个超时时间增大,要么自己另外跑个脚本周期性地访问dns缓存住这样的域名。

发表在 dns | dns解析超时的排查已关闭评论

使用localmodconfig配置内核

之前每次编译内核都是自己慢慢手动把每个选项都确认一下。费时间不说,主要之自己最终实际还是编译了很多不用的模块,造成编译的时间是比较长的。今天试了下localmodconfig还不错。现在的内核配置的时候都是可以先make localmodconfig的,这个只是把当前内核加载了的模块都选上。如果自己有额外的没有插在电脑上的硬件驱动需要支持,可以单独menuconfig 单独选上。

测试了一下编译最新的内核,第一次的编译时间可以在13分钟左右搞定,之前每次都是要编译一个多小时(CPU是i5-2410M)。


make localmodconfig
make menuconfig
fakeroot make-kpkg -j 4  --initrd  --revision=1.0V kernel_image kernel_headers
发表在 OS | 使用localmodconfig配置内核已关闭评论

合并CIDR地址段

最近由于需要用iptables设置一些过滤规则,也有bind里配置acl的时候有合并地址段的需求。看了下cpan里有个现成的模块,几行代码就可以做这个合并工作。


#!/usr/bin/perl
use strict;
use warnings;
use Net::CIDR::Lite;
my $cidr = Net::CIDR::Lite->new;
while (my $line=<>) {
    $cidr->add($line);
}
foreach my $line( @{$cidr->list} ) {
    print "$line\n";
}

试了下把之前100多W个段合并到5K多个段。
另外如果习惯使用python的话也可以使用cidrize模块进行ip段的合并操作。


#!/usr/bin/env python
import cidrize
import sys
import string
def ipmerge(str):
    obj=cidrize.optimize_network_range(str)
    return ";\n".join(cidrize.output_str(obj).split(", "))+";"
def main():
    if len(sys.argv)!=2:
        print "./ipmerge.py ipfile.txt"
        sys.exit(1)
    try:
        fd=open(sys.argv[1],"r")
    except IOError as e:
        print "open ip file failed,",e
    lines=""
    for line in fd:
        lines += line.rstrip(";\n")+","
    lines=lines.rstrip(",")
    print ipmerge(lines)
if __name__ == "__main__":
    main()

测试输入的文件


192.168.1.3/30;
192.168.1.6/30;
192.168.3.3;

pm@debian:~/temp$ ./ipmerge.py iplist
192.168.1.0/29;
192.168.3.3/32;
发表在 net | 合并CIDR地址段已关闭评论

把ssh当socket代理

有的时候需要一个简单的tcp代理。其他机器通过这个机器做代理上网。可以选择在这个服务器上部署squid之类的做透明代理,不过简单期间也可以直接使用ssh隧道转发,有大家用ssh翻墙的方式有点类似。
比如有A,B,C三台机器,只有C能上外网。除了在A,B上使用ssh -D xxx C的形式外,也可以就在机器C上开一个允许外部访问的端口。在机器C上运行:
ssh -g -D 8080 127.0.0.1

然后在机器A,B就设置代理IP为C的IP,端口8080上网了。主要是-g允许外部主机访问本地转发的端口。
[text]
-g 允许远端主机连接本地转发的端口.
[/text]

发表在 System | 把ssh当socket代理已关闭评论

windows下缩短time_wait的时间

最近线上遇到windows机器访问其他机器的时候失败的情况。实际就是本地的端口不够用造成的。
[bash]
$ netsh interface ipv4 show dynamicportrange protocol=tcp

Protocol tcp Dynamic Port Range
———————————
Start Port : 49152
Number of Ports : 16384

$ netsh interface ipv4 show tcpstats

MIB-II TCP Statistics
——————————————————
Timeout Algorithm: Van Jacobson’s Algorithm
Minimum Timeout: 10
Maximum Timeout: 4294967295
Maximum Connections: Dynamic
Active Opens: 402947
Passive Opens: 989620
Attempts Failed: 122047
Established Resets: 49384
Currently Established: 135
In Segments: 47651175
Out Segments: 45510477
Retransmitted Segments: 465369
In Errors: 0
Out Resets: 65865

[/bash]
这个能用的端口实际就16384个,可以直接 netstat -atn查看一下每个状态的数量。如果对外做大量的请求会造成本地端口不够用。

可以修改一下起始端口

[bash]
netsh int ipv4 set dynamicport tcp start=2000 num=63000
netsh int ipv4 set dynamicport udp start=2000 num=63000
netsh int ipv6 set dynamicport tcp start=2000 num=63000
netsh int ipv6 set dynamicport udp start=2000 num=63000

[/bash]

然后修改一下注册表缩短time-wait的时间。
regedit打开注册表,添加
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
“MaxUserPort”=dword:0000fffe
“TcpTimeWaitDelay”=dword:0000005 (缩短为5秒)

发表在 net, OS | windows下缩短time_wait的时间已关闭评论

也说说ip_conntrack

ip_conntrack是一个连接跟踪模块。经常被不小心开启,然后引发各种问题。比如连接太多,造成机器都登录不上,dmesg输出大量的
ip_conntrack: table full, dropping packet.
这个时候很多人会先把ip_conntrack_max调大,来试图缓解这个问题,有时也是可以的。一般需要调整的参数主要有:


net.ipv4.netfilter.ip_conntrack_max = 655350 (默认是65535)
net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 300
net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait = 120
net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait = 60
net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait = 120

其中ip_conntrack_max 是设置允许最大的条目数,另外需要注意几个timeout时间的设置。ip_conntrack_tcp_timeout_established这个默认值是5天,非常非常大,一般是需要调整小的。在调整之前我们可以先对系统当前的连接情况做一个统计,看看 conntack表满了的时候,每种状态的连接各占了多少,比如这样可以直接看到ESTABLISHED的状态太多了,很多都是几天前的,必须得把ip_conntrack_tcp_timeout_established调整小才能解决实际的问题。


# awk '{a[$4]++}END{for(i in a){print i,a[i]}}' /proc/net/ip_conntrack
TIME_WAIT 1109
CLOSE_WAIT 417
CLOSE 48
SYN_SENT 101
ESTABLISHED 62793
SYN_RECV 5
FIN_WAIT 6
LAST_ACK 12

当然,最重要的一点是确认好自己的系统上是否需要使用ip_conntrack模块,如果自己不去加nat表或者state模块之类的,实际一般是用不着的,直接把这个关闭掉一切烦恼都没有了。如果非要用,还有另外的一个方式,就是在raw表标记不对这个链接进行跟踪.
比如我的服务器上对外的服务端口6666端口,因为设置了通过state来判断是否对进入的包放行(设置了RELATED,ESTABLISHED ACCEPT,但是默认会DROP掉NEW,只允许机器主动访问外面),所以如果到6666端口的链接也被跟踪的话,可以会引起很多conntrack记录.实际上对于运行外部访问的端口,可以设置一下


 iptables -t raw -I PREROUTING -i eth0 -p tcp --dport 6666 --j NOTRACK
 iptables -t raw -I OUTPUT -o eth0 -p tcp --sport 6666 --j NOTRACK
 另外需要注意修改一下之前的state语句,新增对UNTRACKED的放行.
 iptables -I INPUT -m state --state RELATED,ESTABLISHED,UNTRACKED -j ACCEPT

REROUTING链对于网关式的场景下是在路由前的操作链表,对于普通的单机来说是处理主动连接到防火墙本机的连接.
OUTPUT链是因为PREROUTING链不能处理本地对外的链接,所以在使用了PREROUTING的时候也需要使用一下OUTPUT链来设置一下NOTRACK.

发表在 net | 也说说ip_conntrack已关闭评论