如何在Linux或Windows转发端口

Windows和Linux自带的工具进行端口转发

场景描述

有下列两台服务器 其中服务器可以被外网访问

  • 数据库: 192.168.2.231:3306
  • 服务器: 192.168.2.230

现在需要开发电脑需要直连数据库(排除工具可以用SSH通道)

Linux下端口转发

使用SSH转发端口

  • 将192.168.2.231的3306端口转发到192.168.2.230的3306端口

    1
    ssh -NTf -R 3306:192.168.2.231:3306 root@localhost
  • 默认本地监听的是 127.0.0.1 如果要服务器监听 0.0.0.0开启网关端口

  • AutoSSH
    • 由于 SSH 会自动断开 需要重连 很麻烦 所以使用 AutoSSH 命令和 SSH 一样 但是断开会自动连接
      1
      autossh -M 8081 -fCNR 3306:192.168.2.231:3306 root@localhost

使用iptables转发

  • 开启内核转发 修改 /etc/sysctl.conf

    1
    2
    # 找到下面的值并将0改成1
    net.ipv4.ip_forward = 1
  • 执行 sysctl –p 生效

  • 执行 iptables 命令转发

    1
    2
    iptables -t nat -A PREROUTING  -p tcp -d 192.168.2.230 --dport 3306 -j DNAT --to-destination 192.168.2.231:3306
    iptables -t nat -A POSTROUTING -p tcp -s 192.168.2.231 --sport 3306 -j SNAT --to-source 192.168.2.230
  • 执行 service iptables save 保存转发规则

Windows下端口转发

  • 使用 netsh 完成转发
    1
    netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=3306 connectaddress=192.168.2.231 connectport=3306