如何通过 SSH 代理和隧道一个 IP 地址?

如何通过 SSH 代理和隧道一个 IP 地址?

我有两台服务器:A 和 B。

服务器 A 是我的主服务器,托管我的网站(在我的国家/地区)。服务器 B 是美国的服务器。

我对通过服务器 A 连接到某些网站有限制,所以我想创建一个从 A 到 B 的隧道或代理(不确定哪一个合适),这样,从 A 发送请求到blocked-site.com就会被代理到B。所以:

server A proxies request to B
server B sends request to blocked-site.com
the website answers to B
B answers to A

我尝试了这个命令:

ssh -vL 1080:blocked-site.com:1080 root@server-b

但当我运行时,nslookup blocked-site.com我没有得到任何答案。

答案1

该命令ssh -vL 1080:blocked-site.com:1080 root@server-b将创建一个本地端口 1080,该端口将通过隧道传输到blocked-site.com:1080。通过此隧道,您可以使用 localhost:1080 访问blocked-site.com:1080。因此,为了能够访问blocked-site.com:1080,您必须将blocked-site.com:1080 替换为 localhost:1080(例如 telnet localhost:1080)。

nslookup 不知道 localhost:1080 已通过隧道连接到blocked-site.com:1080,因此它仍尝试直接访问blocked-site.com:1080

请记住,只有服务器 B 允许,设置的隧道才能工作。由于这是一个安全风险,因此并非总是(通常)如此。

无需改变客户端调用即可访问blocked-site.com:1080的一种方法是(假设服务器A是一台Linux机器):

添加以下行到/etc/hosts

127.0.0.2 被阻止的站点

即使将上述行添加到/etc/hostsnslookup 仍然不起作用,但您会看到ping blocked-site.com现在可以 ping 127.0.0.2。

nslookup 不会受到设置的 SSH 隧道影响的原因是,nslookup 使用 UDP 端口 53 向 DNS 服务器发送请求,而本地主机 TCP 端口 1080 已建立隧道。

相关内容