![将 SSH -L 隧道的端点(在本地主机)转发到另一台机器](https://linux22.com/image/618602/%E5%B0%86%20SSH%20-L%20%E9%9A%A7%E9%81%93%E7%9A%84%E7%AB%AF%E7%82%B9%EF%BC%88%E5%9C%A8%E6%9C%AC%E5%9C%B0%E4%B8%BB%E6%9C%BA%EF%BC%89%E8%BD%AC%E5%8F%91%E5%88%B0%E5%8F%A6%E4%B8%80%E5%8F%B0%E6%9C%BA%E5%99%A8.png)
即使经过长时间的搜索和尝试,我仍然无法解决以下难题:
Client A --------------------------> Server B (172.26.15.15/24)
ssh -L 4321:localhost:4321 Server C (172.26.15.16/24)
- 客户端“A”有一个 ssh 隧道,将 a:4321 转发到 b (localhost):4321
- “服务器 B”应将 localhost:4321 上收到的所有数据包转发到“服务器 C:4321”
这可以做到iptables
吗?如果可以,有人可以告诉我怎么做吗?
答案1
您正在试图使它变得比实际更复杂。输入服务器 C 的 IP,而不是 localhost。
ssh -L 4321:172.26.15.16:4321
选项-L
[localaddress:]localport:remoteaddress:remoteport
- [localaddress:](可选,指定 SSH 将绑定到的本地 IP。默认情况下,它将绑定到所有 IP。
- localport SSH 将隧道绑定到的本地 TCP 端口
- remotehost - 可从 SSH 服务器访问并由 SSH 服务器解析的 IP 地址或 DNS。
- 远程端口——隧道另一端的 TCP 端口。
答案2
可以使用端口转发守护进程(例如 xinetd)转发源自本地主机并目的地为本地主机的流量。
我解决了我的问题:
/etc/xinetd.conf:
service local_forward
{
flags = IPv4
socket_type = stream
wait = no
user = root
redirect = 172.26.15.16 4321
}
在 /etc/服务中:
local_forward 4321/tcp