使用iptables和stunnelencryption点对点应用程序

我正在运行遗留的应用程序,我无法访问源代码。 这些组件在特定端口上使用明文进行对话。 我希望能够使用诸如stunnel之类的东西来保证两个或更多节点之间的通信,以促进对等通信,而不是使用像OpenVPN这样更传统的(和集中式的)VPN包等。

理想情况下,交通stream量将如下所示:

  1. app @ hostA:1234尝试打开一个TCP连接到app @ hostB:1234。
  2. iptables捕获端口1234上的stream量并将其redirect到在端口5678上的hostA上运行的通道。
  3. stunnel @ hostA与stunnel @ hostB:4567协商并build立连接。
  4. stunnel @ hostB将任何解密的stream量转发到app @ hostB:1234。

实质上,我试图将其设置到任何出站stream量(在本地机器上生成)到N端口通过通道转发到端口N + 1,并且接收端在端口N + 1上接收,解密并转发到港口N的本地应用程序

当stunnel @ hostB转发到app @ hostB时,我并不特别担心丢失hostA的源IP地址/机器标识,因为通信负载包含标识信息。

另一个窍门就是通常情况下,你有一个客户/服务器体系结构。 但是这个应用程序比P2P要多得多,因为节点可以dynamic地来回移动,在stunnelconfiguration中硬编码某种“connection = hostN:port”将不起作用。

编辑:另一种可能性可能是configuration某种types的默认路由,使得到端口N的出站stream量通过configuration为网关的stunnel转发。

我认为iptables在这里似乎有些多余。

appA是hostA上的应用程序实例(外部IP AAAA)appB是hostB上的应用程序实例(外部IP BBBB)

  1. appA正在侦听hostA上的127.0.0.1:1234
  2. hostA上的stunnelconfiguration为将encryption的连接从AAAA:1234转发到127.0.0.1:1234

    [的appA]

    accept = AAAA:1234

    连接= 127.0.0.1:1234

    client = no

  3. hostB上的stunnelconfiguration为创buildencryption隧道,并将127.0.0.1:4321转发到AAAA:1234

    / usr / bin / stunnel -d 127.0.0.1:4321 -r AAAA:1234

  4. appB与127.0.0.1:4321build立连接

反之则hostB