【问题标题】:Port Forwarding转发端口
【发布时间】:2012-01-12 12:42:40
【问题描述】:

我对基于套接字的通信的软件级端口转发/隧道有一个简单的要求。

  • 我有一个使用套接字的源服务器和端口。这是一个在 windows 和 linux 中都可以运行的 java 程序,这无关紧要。
  • 我的设备不断向该端口发送数据。可能存在双向通信
  • 我想将此数据重定向到另一个远程服务器和端口。所以对于客户来说,每当我移动我的应用服务器时,他们就不必担心 IP 地址的变化。

是否有任何工具/守护程序/服务程序可用于配置和执行此操作?

我尝试了 SSH,但据我了解,这需要启用 SSH 协议的服务器。就我而言,这不适用。我也尝试过使用 JSch,但这又是一个 java 格式的 SSH 实现。

有人可以指点一下吗? linux下可以用iptables NAT吗?

【问题讨论】:

  • 您使用的是任何标准协议还是您自己的自定义协议?
  • 只是 TCP/IP 数据通信。

标签: java sockets nat tunneling


【解决方案1】:

code.google.com 中有一个名为 portforward 的 TCP/IP 端口转发实用程序。它完全是用 Java 编写的。

【讨论】:

  • 会试一试并确认是否适合。
【解决方案2】:

你可以试试netcatsocat(比netcat更强大)

socat使用tcp4转发80端口的示例:

socat tcp4-listen:80,fork tcp4:{another server}:{another port}

请参阅http://en.wikipedia.org/wiki/Netcat#Port_Forwarding_or_Port_Mapping 了解 netcat

两者都与 java 无关。

【讨论】:

  • 哇!我怎么忘了这个!!但我有个问题! socat 或 netcat 断网后能否自动重连?
  • 我不知道是否有重新连接的内置选项,但如果出现任何问题,重新连接可能是客户的工作
  • 这表示“2011/12/04 15:52:25 socat[4328] E connect(3, AF=2 ipaddress:5000, 16): 地址已在使用中”。我也尝试了带有reuseaddr选项的命令。
  • 为了让大家都受益,我最后使用的命令“socat -d -d -d -d TCP4-LISTEN:9002,fork,reuseaddr TCP4:127.0.0.1:9000”启用了无限制同时连接的数量。感谢您的回答。
【解决方案3】:

如果您已经在系统上运行 xinetd,它会提供一个简单的 port forwarding mechanism,如果您还没有运行 IPTables,它可能会很有用。

如果您正在运行 IPTables,Server Fault 有一个出色的 short question with a very similar goal。虽然我觉得它有点简洁more detailed documentation is available.

【讨论】:

    猜你喜欢
    • 2013-12-08
    • 1970-01-01
    • 2015-02-24
    • 2012-07-19
    • 2017-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多