一个服务仅仅监听 127.0.0.1, 我如何将外部请求通过 nc 转发过去

你可以使用 nc(Netcat)来实现简单的端口转发,将外部请求转发到仅监听 127.0.0.1 的服务。以下是一个常见的实现方法:

示例

假设服务监听在 127.0.0.1:8080,你希望将外部的 0.0.0.0:9090 转发到 127.0.0.1:8080

  1. 启动转发:
    在终端运行以下命令:

    nc -lk -p 9090 -c "nc 127.0.0.1 8080"
    • -l:监听模式。
    • -k:保持连接(允许多个客户端连接)。
    • -p 9090:监听外部的端口 9090
    • -c "nc 127.0.0.1 8080":将接收到的数据通过 nc 转发到 127.0.0.1:8080
  2. 测试转发:
    在另一台机器上,运行以下命令以测试转发是否成功:

    curl http://<你的服务器IP>:9090

    如果设置正确,curl 的请求会被转发到 127.0.0.1:8080,并返回服务的响应。


注意事项

  1. 权限问题:
    如果你需要监听低于 1024 的端口(如 80),可能需要 root 权限运行 nc

  2. 安全性:

    • nc 默认不加密流量,请确保网络环境安全。
    • 考虑使用更安全的工具(如 socatnginx)实现类似的功能。
  3. socat 替代方案:
    如果你希望用更强大的工具,可以使用 socat,例如:

    socat TCP-LISTEN:9090,fork TCP:127.0.0.1:8080