一次云服务器安装达梦数据库后无法远程访问问题处理
今天同事说新装了一台云服务器,使用ssh登录正常,但是上面的达梦数据库服务端口不能访问。
用netstat -anp查看端口是正常监听的,监听的地址也是允许任意ip访问
并且防火墙和iptables都是关闭的
我也觉得奇怪,于是远程登录上去服务器。查看了达梦的端口,看起来是正常的。
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp6 0 0 :::5236 ::😗 LISTEN 3810/dmserver
ssh -v -p 5236 root@服务器公网ip 试一下访问达梦数据库 发现连接失败
于是改成
ssh -v -p 5236 root@127.0.0.1 发现是可以成功连接的
防火墙都是关闭状态,应该不是防火墙问题,我尝试地使用traceroute 服务器公网ip,想看一下是不是网络路由有问题。
结果从traceroute输出发现连接本机ip要经过好几台机,这有点不正常。
traceroute to ##脱敏##, 30 hops max, 60 byte packets
1 100.108.0.1 (100.108.0.1) 7.172 ms 7.271 ms 7.255 ms
2 11.245.20.8 (11.245.20.8) 5.880 ms 6.032 ms 11.245.20.2 (11.245.20.2) 5.943 ms
3 11.245.96.3 (11.245.96.3) 5.058 ms 4.933 ms 11.245.96.9 (11.245.96.9) 5.103 ms
使用route -n查一下路由,发现是没有本机公网ip的路由,所以应该是走了default路由
为什么缺了本地路由呢,难道是ip没配置好。但没配置好为什么ssh能连接呢?我尝试使用ifconfig -a查一下,发现一个问题:本机根本没有配置这个公网的ip!
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.0.137 netmask 255.255.255.0 broadcast 192.168.0.255
inet6 fe80::8d9f:e6ba:acea:d7bd prefixlen 64 scopeid 0x20
ether fa:16:3e:35:e6:b7 txqueuelen 1000 (Ethernet)
RX packets 84212 bytes 49923509 (47.6 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 48468 bytes 14177057 (13.5 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10
loop txqueuelen 1000 (Local Loopback)
RX packets 58427 bytes 56052388 (53.4 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 58427 bytes 56052388 (53.4 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0virbr0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 192.168.122.1 netmask 255.255.255.0 broadcast 192.168.122.255
ether 52:54:00:e8:4d:1c txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0virbr0-nic: flags=4098<BROADCAST,MULTICAST> mtu 1500
ether 52:54:00:e8:4d:1c txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
后来咨询了一下同行,才知道云服务器都是这样的,通过他们路由做nat映射,并不需要在本机配置公网ip。
如果想知道本机公网ip,可以使用curl ip.cip.cc获取。
于是我执行这个命令,给本机配置多一个虚拟ip(公网的)
ifconfig eth0:1 $(curl ip.cip.cc) netmask 255.255.255.0 up
再次执行ssh -v -p 5236 root@服务器公网ip,发现可以成功访问了。
这就说明应该是云服务器的路由阻止了5236端口连接,而不是本机问题。
接下来的事情就简单了,一边找华为云的接口人,看能不能多放开几个端口。在华为云回复前,我们自己使用ssh转发,**把远程端口通过ssh映射到本机访问。这样就可以绕开华为云的防火墙问题。