1 引入
起因是近期要开通某两个内网地址之间的网络策略。
这里假定A机器的地址是172.17.1.100
,B机器的地址是10.10.1.100
,我们需要172.17.1.100访问10.10.1.100
。
往常来说,首先找网络部门开通这两个地址之间的硬件防火墙和软件防火墙即可。但是这次网工帮我开通了,我就是telnet不通。
# 在172.17.1.100机器上执行
telnet 10.10.1.100 8000
2 tcpdump
使用tcpdump在B机器上抓包发现,接收到了数据包,但是没有回包:
# 在10.10.1.100机器上执行
tcpdump tcp port 8000 and host 172.17.1.100
3 route
然后在B机器上查看route,发现路由地址中172.17是docker的地址:
# 在10.10.1.100机器上执行
route -n
难怪没有回包,因为包发到docker的网段去了,并没有发到A机器。
4 解决
这里有两个解决方案:
- 修改docker的网段,这个适合docker上没有跑重要业务,把docker冲突的网段修改了就解决了
- 把这台机器上要访问的服务做一个代理转发