我有两台服务器: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/hosts
nslookup 仍然不起作用,但您会看到ping blocked-site.com
现在可以 ping 127.0.0.2。
nslookup 不会受到设置的 SSH 隧道影响的原因是,nslookup 使用 UDP 端口 53 向 DNS 服务器发送请求,而本地主机 TCP 端口 1080 已建立隧道。