Rub*_*sch 17 networking routing ip tunneling
有些网站/服务我只能从我的服务器所在的子网访问(想想典型的 Intranet 场景)。有没有办法透明地路由通过 SSH 隧道到达这些地址的流量?
考虑以下设置:
我的笔记本电脑已连接到家庭网络。它不能直接访问 ips X 和 Y 上的服务。我有一个到服务器的 SSH 隧道,该服务器位于可以实际访问这些服务的子网上。
我能否以某种方式自动将所有流量封装到 X 和 Y 的子网以通过此隧道,而不必运行整个 VPN 解决方案来通过服务器发送我的所有流量?换句话说:进入任何其他子网的所有流量仍应直接来自笔记本电脑,而不通过服务器(使用隧道)。
小智 7
您可以在路由表中指定路由流量的接口:
sudo route add <host.com> -interface <ppp0>
Run Code Online (Sandbox Code Playgroud)
其中,host.com 是您要通过该接口访问的主机名或 IP,而 ppp0 是您的 vpn 的链接标识符,该ifconfig命令与该命令一起显示。
最新版本的 OpenSSH 支持 tun/tap 网络设备以实现真正的 VPN 支持。请参阅https://help.ubuntu.com/community/SSH_VPN了解一些基本文档(显然是针对 Ubuntu,但基本原则也适用于其他地方。)
免责声明:我还没有真正测试过我要描述的内容,实际上它可能是完全错误的,但你的问题是如此有趣,我无法抗拒起草答案的诱惑。:-) 另外,此处的设置取决于某些iptables可能仅存在于 Linux 上的功能。
假设您想要从笔记本电脑连接到服务器 X1 上的特定端口 P1、服务器 X2 上的端口 P2 等 - 我将描述如何通过 SSH 隧道将 TCP 流量路由到这些特定服务器+端口对。 注意: IP 地址 X1、X2 等是从网关主机(您通过 SSH 连接到的主机)看到的服务器的 IP 地址。
选择一些未使用的本地端口L1(例如10000),L2(例如10001)等。端口L1,L2,...必须全部不同,并且它们的数量应等于不同的(Xn,Pn)服务器+的数量端口对。
用于iptables将定向到 Xn:Pn 的数据包重定向到 localhost:Ln
iptables -t nat -A 输出 -p tcp -d X1 --dport P1 -j DNAT --到目的地本地主机:L1 iptables -t nat -A 输出 -p tcp -d X2 --dport P2 -j DNAT --目的地本地主机:L2
现在通过 SSH 连接到网关,使用-L将流量从 localhost:Ln 隧道传输到 (Xn, Pn) 的选项:
ssh gateway.server -L 本地主机:L1:X1:P1 -L 本地主机:L2:X2:P2 ...
例子:
# access webserver.intranet (port 80) through localhost:10080
iptables -t nat -A OUTPUT -p tcp -d webserver.intranet --dport 80 -j DNAT --to-destination localhost:10080
ssh gateway.server -L locahost:10080:webserver.intranet:80
Run Code Online (Sandbox Code Playgroud)
注意事项:
它只适用于 TCP,如果它有效的话......
如果您想访问多个服务器,设置 VPN 可能会更省力
-D使用 SSH选项来模拟 SOCKS 代理并通过该代理传输所有流量可能仍然更容易。
| 归档时间: |
|
| 查看次数: |
41610 次 |
| 最近记录: |