我有两台运行RHEL Linux的机器A和B. 每台机器都有一个1Gig网卡连接到我称之为“LAN”的networking。 每台机器都有一个连接到我称为“BIGDATA”networking的10Gig网卡。 除了通过这些机器以外,这些networking并不相互连接。
我在BIGDATAnetworking上的A的10Gig接口上有光纤接头。 水龙头引导到一个捕获服务器,我想logging所有的数据进出。 最初所有的TCP,但也许一些UDP将是很好的。
为了开发和testing的目的,我想在A上运行TCP对话的双方,然后用那些水龙头来捕获对话。 将使用此设置的开发人员不会有B上的帐户(至less这是我的目标)。
在我看来,超级用户应该可以在B上设置某种types的转发/中继,这将允许A上的客户端连接到A上的服务器,而是通过光纤。 也就是说,stream量从LANnetworking上的A到B,然后返回到BIGDATAnetworking上的A。 返回stream量返回相同的path。
到目前为止,我的尝试一直是使用SSH隧道。 像A:~ $ssh B -L 8051:<A's-BIGDATA-IP>:3434 -N 。 这实际上很适合捕获客户端到服务器的stream量。 但不幸的是,服务器的反应是find只停留在本地的捷径,而不会出现在光纤上。 看着wireshark,数据包知道他们的目的地IP,并且没有义务走隧道。
我发现这个答案,但我相信所有的解决scheme都需要两个接口在同一个networking上。 也许我的解决scheme的种子在那里,但我找不到它们。
我想我可以从头开始编写这个程序,在B上运行一个程序,在LAN接口上build立TCP连接,在BIGDATA接口上启动另一个TCP连接,返回到A,并转发回复。 它只会复制TCP有效载荷,这对我的目的来说是足够的。
有没有一个很酷的工具,这个转发/中继已经?
有没有办法让SSH隧道工作的方式,我想要的回报stream量?
源和目标NAT
您可以使用与您find的答案相同的想法,将DNAT和SNAT的组合转发出去和返回,只要您不介意修改正在捕获的数据包。 捕获将有一个目的地或src知识产权的B,但它听起来像你已经完成了你的转发客户端。 NAT的好处是速度我想,一切都停留在内核空间。
这个例子是A上的客户端连接到A:BIGDATA:3434上的服务器。 NAT规则将连接从A转发到B,然后B转发回A,将源设置为B来设置返回path。 如果你不熟悉NAT表,可能看看netfilter指南 。
确保在B上使用以下任一方法启用IP转发:
sysctl -w net.ipv4.ip_forward=1 echo 1 > /proc/sys/net/ipv4/ip_forward
在LANnetworking上,stream量从Astream向B.
# On A, forward local traffic for local service out LAN to B. iptables -t nat -A OUTPUT -p tcp -d A:BIGDATA --dport 3434 -j DNAT --to-destination B:LAN
然后回到BIGDATAnetworking上的A。
# On B, forward the traffic to back to A over fibre iptables -t nat -A PREROUTING -p tcp -d B:LAN --dport 3434 -j DNAT --to-destination A:BIGDATA
返回stream量返回相同的path
# On B, set the source address for this traffic to B fibre iptables -t nat -A POSTROUTING -d A:BIGDATA -p tcp --dport 3434 -j SNAT --to-source B:BIGDATA
NAT连接跟踪将最后一次映射回原始源IP。
看看EtherPuppet ,可能与Scapy结合; EtherPuppet被描述为
一个Linux的小程序,将为以太网接口创build一个巫毒娃娃。
…
真实界面看到的一切都会被虚拟界面所看到。 所有将被发送到虚拟接口的信息将由真实接口发送。
Scapy被描述为
一个强大的互动分组处理程序。 它能够伪造或解码大量协议的数据包,在线上发送,捕获,匹配请求和回复等等。
虽然这不是我希望find的答案,但我最终还是自己动手了。
我编写了一个程序在B上运行,它将接受LAN接口上的连接,并启动BIGDATA接口的连接。 该程序将TCP有效负载复制到新的传出消息中。 它以相同的方式回复回复。 这不保留头信息(例如源IP) – 在我的情况下,我认为这是一件好事,所以返回stream量不会快捷。
它正在工作,尽pipe对于我认为是如此基本的事情来说,这是一种痛苦。 我会发布源代码,但是它很长,可能写得不是很好。
我将要离开的答案不被接受,希望有人最终会用完美的解决scheme绊倒它!