我总想把linux串在中间.

我总想把linux串在中间.

在遇到复杂些的网络问题时. 我有总产生一个想法. 把这台服务器的接入线上串上一台linux设备.
这样我可以得到网络通信信息. 还可以多出很多测试手段.

就是把这样的网络连接
[服务器] -------[网关]— {互联网}
改成
[服务器] —[linux]----[网关]— {互联网}

至于为什么会有这样的想法呢?

  1. 抓一下服务器通信数据.
  2. 服务器或网关 没有控制权或操作起来很麻烦.
  3. 网络业务对源IP, 目标ip有限制. 在别的位置无法测试.
  4. 在服务器正常通信的情况下. 我也想使用一下服务器的IP.

实际工作的要求总是千奇百怪. 我也总有些古怪的想法.

方法一 二层串接在中间.

在linux上建一个桥接口. 把两个网卡加入桥接口. 相当于以太网二层转发.
(按印像写出命令. 我就不实际测试了.)

ip link add br0 type bridge
ip link set eth0 master br0
ip link set eth1 master br0
ip link set br0 up
ip link set eth0 up
ip link set eth1 up

这样就可以在linux实现查看通信数据

工作中的例子.
有一个校园网中. 一台新安装的服务器ping得通任何位置. 但tcp访问另一台服务器时应用出错.
新服务器可以提供技术信息. 说是让处理网络故障.
把linux系统的本子. 以二层方式串接在中间. 抓一下通信数据.
最后判断为.校园网上有网络干扰设备. 发现tcp连接传送数据量较大时.
会进行干扰. 发rst置位的数据使连接断开.
联系校园网管理部门. 得到回应是. 这样的应用需要申请加入白名单.
才能够正常的在校园网内进行服务.

方法二 以三层工作模式串接在中间

换一个思路. 我希望接在中间的linux处于三层工作模式. 这样可以实现更多的功能.
相应的设置也会复杂一些.

一定要实现的功能有: IP设置, 路由设置, 应答arp请求, ipv4数据包转发.
也可能用到的功能有. nat 或其他复杂设置.

我们需要先得到这些数据.

服务器: IP, 网关, 网卡mac地址.
网关: IP, 网卡mac地址
临时使用两段私有ip地址. 不要与网络现有地址冲突.

网关,服务器任意位置有控制权限都可以得到这些信息. 实在不行就用方法一先串进去.
抓一下通信数据. 也可以得到了.

假设我们的网络信息是这样的
服务器: 5.0.0.2/24 网关 5.0.0.1 mac 00:00:00:00:00:52
网关: 5.0.0.1/24 mac 00:00:00:00:00:51
临时网段地址: 10.0.1.0/30 用于连接网关. 10.0.2.0/30用于连接服务器.
我们的linux 网卡eth0 连接网关. eth1连接服务器.

(按印像写出命令. 我就不实际测试了. )


ip link set eth0 down
ip link set eth1 down
#这两行设置网卡mac 是希望服务器看到的mac不变化.可以不设置.
ip link set addr 00:00:00:00:00:52 dev eth0
ip link set addr 00:00:00:00:00:51 dev eth1
ip link set eth0 up
ip link set eth1 up

#分别设置两个网卡. 设置内网地址段. 指一下真正的地址经过内网地址段的对端路由可达.设置mac为对端.
ip addr add 10.0.1.1/30 dev eth0
ip route add 5.0.0.1/32 via 10.0.1.2
ip nei replace 10.0.1.2 lladdr 00:00:00:00:00:51 dev eth0 nud permanent

ip addr add 10.0.2.1/30 dev eth1
ip route add 5.0.0.2/32 via 10.0.2.2
ip nei replace 10.0.2.2 lladdr 00:00:00:00:00:52 dev eth1 nud permanent
#设置默认路由.
ip route rep 0.0.0.0/0 via 10.0.1.2

#启动arp proxy 应答服务器的路由的正常arp请求
echo “1” > /proc/sys/net/ipv4/conf/eth0/proxy_arp
echo “1” > /proc/sys/net/ipv4/conf/eth1/proxy_arp

#启动ipv4路由转发.
echo 1 > /proc/sys/net/ipv4/ip_forward

#linux可以使用服务器地址访问外网
iptables -F -t nat
iptables -t nat -A POSTROUTING -o eth0 -s 10.0.1.1/32 -j SNAT --to 5.0.0.2


应该就这么多设置.

还可能需要考虑的.
转发性能.
多了一次三层转发. 会对ip层的ttl进行减1. 如果不希望别人看到.可以考虑用 iptables的 TTL target.

工作中的例子.
有一次东家让我把当前的windows服务器抬走. 把新linux服务器抬过来替换掉它.
两个系统都是运行相同的 php程序. 程序是可以正常运行的.
服务器这一端为自己维护的部分.情况很了解. 对端连接的是另一个网络,
通过了一些网络安全设备. 除了对接ip和路由其他信息基本不清楚. 对端的配合也不到位.

这样抬服务器的工作我本应该是擅长的. 可是抬了才发现.
同样的设置windows网络通. 但linux网络就是不通.
tcp连接根本无法建立.对端看样子是把所有的tcp数据都drop掉了.

我来抬过来, 抬过去. 感觉情况不妙. 感觉不出大招是处理不了这个问题了.
于是我有这样的想法. 把linux 以三层模式串接在服务器前面. 两台服务器使用相同ip通信.
先找出故障. 再处理故障. 最后进行业务测试.一切正常后, 再切换服务器设备.

手段多了. 很快我就发现.只要linux服务器发带有 时间戳的tcp包,就无回应.
接下来的"排除故障", 测试, 切换就都很顺利完成了.

写到这儿就结束了.

至于我为什么要写这此. 只是因为 “老年人常思既往”.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值