云服务器添加路由了为什么还是ping不通(求助中) - 我想这里也能求助吧

385 阅读4分钟

云服务器添加路由了为什么还是ping不通

背景:公司的服务器马上到期了,但在其他云平台还有机器,需要把测试环境迁移到对应的服务器。

因为新的云平台一下子有四台机器,需要对主机间的Docker服务进行通信打通,然而百般操作,业余运维始终是业余!!!

我按网上的教程做了哪些操作

  1. 使用路由的方式 -> (失败)
  2. 使用GRE协议的方式 -> (失败)

使用路由的方式:

  1. 首先给Docker指定bip
  2. 打开服务器的转发开头
  3. 添加指向路由

分配bip

四台主机,分别对应的网关是:

主机名当前内网IP绑定的bip
001192.168.0.24910.24.1.1/24
002192.168.0.15310.24.2.1/24
003192.168.0.21110.24.3.1/24
004192.168.0.210.24.4.1/24

以下是配置好bip后,重启后的docker网络,对应的IP是对的 绑定好bip的docker网络

这里给大家贴一下最终设置的代码,网上也有,如果后面调通了,也会更新,大家就可以直接在这里复制粘贴了:

# 编辑docker的daemon.json文件
vi /etc/docker/daemon.json

# 在配置中添加bip,注意,这里IP的结尾是1,不是0
"bip": "10.24.1.1/24"

# 配置好的bip应该是在配置文件的{}里面的,
# 如果之前docker没有配置过daemon.json,那么这个文件是不存在的,所以打开编辑的时候,也是空的,
# 最终的结果应该是这样:
{
        "bip": "10.24.4.1/24"
}

打开服务器的转发开关

直接给大家看最终的配置结果:

主机打开了ipv4的转发开头

配置的过程贴一下代码:

# 首先cat一下配置信息(当前主机的系统是centos7的,使用的服务器不同,可能配置文件的位置也不同)
cat /etc/sysctl.conf

# 如果没有配置,应该会返回:
# sysctl settings are defined through files in
# (翻译:sysctl的配置,是从这些路径上的配置文件定义的)
# /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.
#
# Vendors settings live in /usr/lib/sysctl.d/.
# To override a whole file, create a new file with the same in
# /etc/sysctl.d/ and put new settings there. To override
# only specific settings, add a file with a lexically later
# name in /etc/sysctl.d/ and put new settings there.
#
# For more information, see sysctl.conf(5) and sysctl.d(5).

vm.swappiness=0
net.core.somaxconn=1024
net.ipv4.tcp_max_tw_buckets=5000
net.ipv4.tcp_max_syn_backlog=1024

# 在这里,我使用路径/etc/sysctl.d/下的配置进行设置,我的这个目录下已经有一个配置文件:99-sysctl.conf
# 把转发开关打开追加到配置中
echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.d/99-sysctl.conf

# 追加完后输入生效命令
sysctl -p
# 输入命令后,就可以出现上图的展示效果了

添加指向路由

大家先来看配置好的路由:

配置好的路由

同样为大家提供一下命令行代码:

# 添加网关路由,比如这里的10.24.3.0这个IP段指向003机器,003机器的内网地址是192.168.0.211
route add -net 10.24.3.0/24 gw 192.168.0.211
# 这个命令的意思是,把10.24.3.0号段的IP指向192.168.0.211为网关
# 这里的号段结果是0,不是1,与docker上的bip是相反的

# 依次对各主机进行添加后,使用route -n就可以看到上图配置好的路由了
route -n

除以上外,还尝试配置了其他东西

iptables

iptables -t nat -F POSTROUTING

# 每台主机的IP号段记得替换一下
iptables -t nat -A POSTROUTING s 10.24.3.0/24 ! -d 10.24.0.0/16 -j MASQUERADE

使用GRE协议的方式:

参考了这个教程:docker 实践十一:docker 跨主机通讯

整个步骤基本与这个教程相同,此处就不再赘述了,这里要说的是,一些安装工具的问题。

创建桥接的工具: ovs-vsctl -> openvswitch

可以直接下载这个:openvswitch-2.17.5

也可以去官网上下载,直接通过服务器下载可能会超时,毕竟老外的东西

构建需要的工具

# 需要安装的包
yum -y install rpm-build redhat-rpm-config gcc autoconf automake libtool \
openssl-devel python3-devel desktop-file-utils groff graphviz \
selinux-policy-devel python3-sphinx libcap-ng-devel unbound unbound-devel gcc-c++ 

# 再新版本的可能会有不同,可以先安装rpm-build与redhat-rpm-config这两个包,
# 在编译opwenvswitch的时候再根据提示安装对应的工具即可

编辑与安装

# 创建编辑目录
mkdir -p ~/rpmbuild/SOURCES

# 如果服务器有外网,可以直接下载,我这边是从本地上传后复制到这个目录
cp openvswitch-2.17.5.tar.gz ~/rpmbuild/SOURCES/ 

# 进入目录
cd ~/rpmbuild/SOURCES

# 解压压缩包
tar -zxvf openvswitch-2.17.5.tar.gz

# 开始编辑(这里在上面如果没有提前安装相关工具,会在这些提示,按要求安装即可)
rpmbuild -bb --nocheck openvswitch-2.5.10/rhel/openvswitch-fedora.spec

# 本地安装工具
yum -y localinstall ~/rpmbuild/RPMS/x86_64/openvswitch-2.5.10-1.el7.x86_64.rpm 

# 查看桥接工具版本
ovs-vsctl -V

# 需要创建桥接工具目录
mkdir /var/run/openvswitch

# 启动并检查工具状态
systemctl enable openvswitch
systemctl start openvswitch
systemctl is-active openvswitch

# 安装桥接工具
yum install -y bridge-utils

反正把工具都弄好之后,再按上边教程的设置,最终各主机间的服务还是无法通信!!

结果

虽然一顿操作猛如虎,动作娴熟到悲伤(因为之前生产服务器也遇到了这样的问题),还是没有解决!!! 也用过其它方案,就是不通,最后生产环境是使用docker的host方式,暴力的解决了!! 这两个环境分别对应腾讯云和华为云,阿里云还没有机会测试。

当前状态:未解决

大神们,来救救我吧!!