iptables
默认5个表, 不可增加其他表
1 raw 用于配置数据包,raw 中的数据包不会被系统跟踪。
2 filter 是用于存放所有与防火墙相关操作的默认表。
3 nat 用于 网络地址转换(例如:端口转发)。
4 mangle 用于对特定数据包的修改(参考 损坏数据包)
5 security 用于 强制访问控制 网络规则
控制Linux內核netfilter模組, 做数据包的过滤和转发,只是netfilter项目的一小部分
防火墙黑白名单
可以在内核层面将对80端口的访问直接映射到8080端口上
NAT, 将对本机的请求,转发到内部其他NAT ip上
下图中可以看到数据包是如何进入本地进程local process的
birdge check检查是否使用桥接网口
参考: https://wiki.archlinux.org/index.php/Iptables_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)
https://en.wikipedia.org/wiki/Netfilter
docker使用NAT时,docker命令也是操作iptables, 给在运行中的容器增加端口映射,需要手动执行iptables命令
iptables -t nat -A DOCKER -p tcp --dport 8001 -j DNAT --to-destination 172.17.0.19:8000
查看所有nat规则 iptables -t nat -L -n --line-numbers
删除一条nat规则 iptables -t nat -D POSTROUTING 2 ,最后一个数字为上一个命令打印的序号
ip route
简写ip r
ip route add default via 192.168.1.1 dev eth0
Adds a default route (for all addresses) via the local gateway 192.168.1.1 that can be reached on device eth0.
ip route add 10.1.1.0/30 via 10.1.1.1 dev eth0
访问10.1.1.0/30内的机器 都是通过10.1.1.1
增加路由, 在本地机器上操作, 对应的文件是/etc/iproute2/rt_tables
, 等同与netmanager中的操作命令route add default gw 192.168.1.1
255 local, 254 main, 253 default 默认的三个路由表, 可以增加自定义的路由表
windows环境中Metric越小 优先级越高
(添加多个默认网关会怎样? 如果两个默认网关在一个ip段,应该没啥问题; 如果不是同一网段,最好使用route的形式)
ip rule
路由规则, 路由表中的具体规则
出方向: ip route, ip rule决定了数据包在到达网口Interface时,需要经过的网关和路由器
docker的网络模型
bridge 默认使用docker0桥接网口
host 直接使用宿主机物理网卡
none
container
高级课题:docker容器配置独立ip (这个够阳春,没有实验出来) 端口如何开放?
pipework 需要使用none模式启动 https://github.com/jpetazzo/pipework#connect-a-container-to-a-local-physical-interface
SNAT,DNAT
http://cn.linux.vbird.org/linux_server/0250simple_firewall_5.php
traceroute如何定位网络问题 ?
linux traceroute == window tracert
点击查看代码
[root@btcsdataservice002 ~]# traceroute id.cisco.com
traceroute to id.cisco.com (xxx.28.29.61), 30 hops max, 60 byte packets
1 dfw02-wxpd-lb02-vl3221-snip.webex.com (10.241.92.4) 0.234 ms 0.198 ms 0.161 ms
2 * * 10.240.198.2 (10.240.198.2) 11.197 ms
3 209.197.198.179 (209.197.198.179) 0.674 ms 0.782 ms 0.788 ms
4 207.182.183.12 (207.182.183.12) 0.962 ms 1.181 ms 0.980 ms
5 dfw10-wxbb-crt01-be114.webex.com (64.68.116.121) 2.297 ms 2.301 ms dfw10-wxbb-crt01-be116.webex.com (64.68. 116.138) 2.403 ms
6 ae60.edge1.Dallas1.Level3.net (4.8.13.44) 2.026 ms 2.250 ms 2.216 ms
7 * * *
8 4.30.70.2 (4.30.70.2) 2.010 ms 2.005 ms 1.973 ms
9 ae5.r02.border.dfw02.sdn.netarch.akamai.com (23.203.147.189) 3.779 ms * *
10 * * *
11 * a184-28-29-61.deploy.static.akamaitechnologies.com (xxx.28.29.61) 2.059 ms *
[root@btcsdataservice002 ~]#
[root@btcsdataservice002 ~]#
[root@btcsdataservice002 ~]#
[root@btcsdataservice002 ~]#
[root@btcsdataservice002 ~]#
[root@btcsdataservice002 ~]# traceroute apix.cisco.com
traceroute to apix.cisco.com (xxx.37.145.221), 30 hops max, 60 byte packets
1 dfw02-wxpd-lb02-vl3221-snip.webex.com (10.241.92.4) 0.222 ms 0.206 ms 0.162 ms
2 10.240.198.2 (10.240.198.2) 0.703 ms 0.864 ms *
3 209.197.198.179 (209.197.198.179) 0.611 ms 0.589 ms 0.692 ms
4 207.182.183.12 (207.182.183.12) 1.029 ms 1.114 ms 207.182.183.16 (207.182.183.16) 1.128 ms
5 alln01-mda2-isp-gw2-hu-0-0-1-0.cisco.com (12.107.4.33) 0.903 ms alln01-mda1-isp-gw1-hu-0-0-1-0.cisco.com (1 28.107.4.49) 0.979 ms 1.110 ms
6 alln01-mda1-cbb-gw1-be6.cisco.com (12.107.4.2) 1.134 ms alln01-mda1-cbb-gw1-be5.cisco.com (128.107.4.5) 1. 162 ms alln01-mda1-cbb-gw1-be6.cisco.com (128.107.4.9) 1.265 ms
7 alln01-mda1-dmzbb-gw1-be91.cisco.com (xxx.36.112.190) 0.457 ms alln01-mda2-dmzbb-gw2-be92.cisco.com (xxx.36. 112.194) 0.469 ms 0.434 ms
8 alln01-mda1-dmzdcc-gw1-por2.cisco.com (xxx.36.112.154) 0.636 ms 0.753 ms 0.872 ms
9 alln01-mda1-fab1-sw3811-dmzdcc1uplink.cisco.com (xxx.36.113.218) 0.680 ms alln01-mda2-fab1-sw3812-dmzdcc2upl ink.cisco.com (xxx.36.113.230) 0.834 ms alln01-mda2-fab1-sw3812-dmzdcc1uplink.cisco.com (xxx.36.113.222) 1.366 ms
10 10.123.175.235 (10.123.175.235) 0.655 ms 0.918 ms 1.179 ms
11 * * *
12 * * *
可以看出
- 访问
id.cisco.com
时,数据包从xxx.webex.com
局域网网关出去,经过Level3.net
,又经过akamai.com
, 进到akamaitechnologies.com
, 说明id.cisco.com
在akamaitechnologies.com
里面。 - 访问
apix.cisco.com
时,数据包从xxx.webex.com
局域网网关出去, 经过两个公网路由器,直接到达了xxx.cisco.com
, 说明apix.cisco.com
是部署在xxx.cisco.com
里的
id.cisco.com和apix.cisco.com两个应用部署不在一个数据中心,一个是在公有云上,一个是在私有云上。
如果中间某一个路由器断掉了, 说明有某种限制方法阻断了请求。
两个都访问不了时, 处理方式不一样,要找的人也不一样。
比如数据包一直在xxx.webex.com
里面, 说明局域网都没出去。此时要找webex.com的网工,而不是找cisco.com的网工。
@@@build beautiful things, share happiness@@@