我有一个客户端,它无法直接访问互联网。但它通过 LAN 连接连接到服务器,而服务器可以访问互联网。
我想从客户端通过服务器向互联网发送 HTTP 请求。我该怎么做?
+--------+ +--------+ +--------+
| | LAN | Ubuntu | WAN | |
| Client <--------> 16.04 <--------> WWW |
| | | Server | | |
+--------+ +--------+ +--------+
脚步:
- 客户端于以下时间向 LAN 上的服务器发送请求https://用户:密码@本地服务器:1234
- 服务器将请求转发到远程端点https://用户名:密码@远程服务器
注意:我只需要将 HTTP 请求转发到单个端点
我一直在关注跑步乌贼或者微型代理在服务器上,但我不确定如何正确配置它们,或者这是否是最简单的方法。这里需要代理服务器吗?
答案1
有两种解决方案。第一 - 在服务器上配置 NAT,第二 - 配置 HTTP 代理。因此,从我的角度来看,对于您的情况最好的方法是配置 NAT,您不需要安装任何其他软件,只需配置防火墙即可。
要配置它,iptables
您应该执行两个步骤:
首先确保内核中启用了数据包转发
# echo 1 > /proc/sys/net/ipv4/ip_forward
您还可以通过添加以下行使其永久生效/etc/sysctl.conf
net.ipv4.ip_forward = 1
然后您应该在iptables
配置中添加两个规则:
-A PREROUTING -p tcp -m tcp --dport 1234 -j DNAT --to-destination internet-ip:1234
-A POSTROUTING -p tcp -m tcp --dport 1234 -j MASQUERADE
可以通过命令完成:
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 1234 -j DNAT --to-destination internet-ip:1234
iptables -t nat -A POSTROUTING -p tcp -m tcp --dport 1234 -j MASQUERADE
用这个你应该检查一下转发块的规则,它看起来像这样-A FORWARD -j REJECT --reject-with icmp-host-prohibited
。如果存在,可以用命令删除它:
iptables -t filter -D FORWARD -j REJECT --reject-with icmp-host-prohibited