近期因为外网接入光猫voip死亡的原因,研究N2N,发现绕不过去iptables和route命令
-
先说route
1.1windows
用管理员打开cmd
route add 192.168.0.0 mask 255.255.0.0 192.168.1.1
1. 192.168.x.x的访问都路由到192.168.1.1,192.168.1.1如果是本机地址,那么就通过对应的网卡发送出去;如果192.168.1.1不是本机地址,那么寻找192.168.1.1对应的路由地址
2. route add 0.0.0.0 mask 0.0.0.0 192.168.1.1,说明192.168.1.1是default路由
3. route delete 192.168.0.0 mask 255.255.0.0,删除对应的路由,也可以用route delete default来删除default路由,如果是远程操作,删除操作要谨慎,可能导致设备失联
4. windows的route命令不用太关注网卡,因为route命令无法在网卡间转发数据,也就是不支持NAT,route命令会根据参数网关,自动添加对应的网卡,
5. 跃点数,一般用不到,如果存在多个指向相同地址(网段)的路由,那么跃点数越小,优先级越高
1.2 linux(ubuntu)
手头只有ubuntu,以ubuntu为例
1. route add -net 192.168.0.0/16 gw 192.168.1.1 dev eth0
掩码用数字表达,规律很好记
255.255.255.0=24 255.255.254.0=23 255.255.0.0=16 255.0.0.0=8
网关前要加gw修饰
设备名称前加dev修饰
其他与windows没有差异
-
再说iptables
首先,iptables修改完立即生效,iptables -L看到的不全,如果想看完整的可以用如下命令
sudo vim xxxx.txt
sudo chmod a+w xxxx.txt
iptables-save > xxxx.txt
基本的命令
#清空filter表
iptables -F
#清空nat表
iptables -t nat -F
#默认允许所有传出连接
iptables -P OUTPUT ACCEPT
#允许环回接口的传入连接
iptables -A INPUT -i lo -j ACCEPT
#允许所有接口的传入连接
iptables -P INPUT ACCEPT
#允许所有接口的转发连接,注意需要配合下面的修改
iptables -P FORWARD ACCEPT
vi /etc/sysctl.conf
#net.ipv4.ip_forward = 1 #将前面的#删除后保存退出
假设网络如下
主机1:
192.168.1.1 eth0(外网)
192.168.143.2 eth1(内网)
主机2:192.168.143.5 与主机1的eth1连同一个交换机
执行如下命令后,添加一个转发的规则,即可实现主机2通过主机1上网,即eth1和eth0之间的转发
iptables -F
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -t nat -A POSTROUTING -s 192.168.143.0/24 -o eth0 -j MASQUERADE
注意,要在外网网卡(eth0)上设置转发,要提前打开linux转发
额外的关键步骤:
1. 主机2要能ping通192.168.143.2,如果不是交换机直连,需要在主机2上设置路由或者网关,确保能访问192.168.143.2
2. 主机1要能上外网,能ping通baidu之类的外网地址,如果不行,主机1上把路由调通
3. iptables修改后直接生效,改乱了清空重来,经常用iptables-save后,查看
多说几句:
如果是小白,用windows的internet共享就很好,图形化界面;
如果图稳定,一定带机量,硬路由是正路;考虑成本的话,openwrt软路由也是可以的
如果学习,虚拟机装个linux 很合适