我以前曾成功使用过远程和本地转发,但这次我无法使设置正常工作。
我想要实现的目标是:使我的 SQL 服务器可公开访问,以便 Google CloudSql 可以复制数据库。
我在路由器后面有一个运行 debian 的 NAS,可以在位置 A 进行端口映射 我在位置 B 有一个运行 mariadb 的 CentOS VM
从位于 BI 的虚拟机运行以下命令
:~$ ssh -f -N -T -R 3306:localhost:3306 my.dyndns.address -p [sshport]
(nas 上没有运行 mysql 服务器,或者至少没有在端口 3306 上运行)
然后在 nas 上:
:~# ss -anp | grep :330
tcp LISTEN 0 128 127.0.0.1:3306 *:* users:(("sshd",pid=27182,fd=9))
tcp LISTEN 0 128 ::1:3306 :::* users:(("sshd",pid=27182,fd=8))
在路由器上,我将端口 33006 转发到 nas 的端口 3306,如下所示:
(列协议、外部起始端口、外部结束端口、本地端口、目标 其他端口转发规则(如 openvpn 和 ssh)也可以完美地运行
我可以从我自己的计算机连接到 mysql 数据库,该指令bind-address
设置为 '*',我也尝试注释该指令,但正如预期的那样,没有产生不同的结果
我正在查看两台机器的输出journalctl -f
,但没有传来任何可以帮助我排除故障的信息。
--- 澄清 ---
我想从外部连接到
my.dyndns.address
端口33006
。my.dyndns.address
从我的 ISP 调制解调器转换为公共地址。33006
通过调制解调器转发到 NAS 的本地 IP 端口 3306,然后再通过隧道传输到 mysql 服务器(位于位置 B)。我正在测试这个
mysql -h my.dyndns.address --port=33006 -u myuser -p
然而
mysql -h local_ip_on_B -u myuser -p
很好用
我还尝试使用 VPN 从位置 B 的数据库服务器连接到位置 A(NAS 也是 OpenVpn 服务器),并将 ISP 调制解调器上的转发端口直接指向数据库服务器在 tun 接口上获得的 IP 的 IP 地址。如果我与位置 A 建立第二个 VPN 连接,我可以使用来自我计算机的 tun 接口的 IP 连接数据库。
我收到的错误是ERROR 2002 (HY000) Can't connect to MySQL server on ip_of_the_nas
。
更新
有人能帮我吗 ?
答案1
ss
输出的这个片段
127.0.0.1:3306
表示仅在环回接口上sshd
侦听 IPv4 端口3306
。来自外部的通信通过另一个(非环回)接口进行。
GatewayPorts
指定是否允许远程主机连接到为客户端转发的端口。默认情况下,sshd(8)
将远程端口转发绑定到环回地址。这可防止其他远程主机连接到转发端口。GatewayPorts 可用于指定sshd
应允许远程端口转发绑定到非环回地址,从而允许其他主机连接。该参数可能是no
强制远程端口转发仅对本地主机可用,yes
强制远程端口转发绑定到通配符地址,或clientspecified
允许客户端选择转发绑定到的地址。默认值为no
。
所以你需要
GatewayPorts yes
在你的sshd_config
;或GatewayPorts clientspecified
或者然后一这些:ssh -R :3306:localhost:3306 … # note the extra `:' ssh -R '*':3306:localhost:3306 … ssh -R proper_IP_here:3306:localhost:3306 …
别忘了你需要重新加载/重新启动sshd
。还要检查 NAS 上的防火墙是否没有阻止端口。