今天同事說新裝了一台雲服務器,使用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映射到本機訪問。這樣就可以繞開華為雲的防火牆問題。