У меня есть клиент, у которого нет прямого доступа к Интернету. Но он подключен к серверу по локальной сети, тогда как сервер имеет доступ к Интернету.
Я хотел бы отправить HTTP-запрос от клиента через Сервер в Интернет. Как я могу это сделать?
+--------+ +--------+ +--------+
| | LAN | Ubuntu | WAN | |
| Client <--------> 16.04 <--------> WWW |
| | | Server | | |
+--------+ +--------+ +--------+
Шаги:
Примечание: мне нужно перенаправить HTTP-запрос только на одну конечную точку
Я искал запускать squid или tinyproxy на сервере, но я не уверен как их правильно настроить или самый простой подход. Нужен ли здесь прокси-сервер?
Есть два решения. Первый - настроить NAT на сервере, Второй - настроить HTTP Proxy. Итак, с моей точки зрения, для вашей ситуации лучший способ - настроить 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 -hibited
. Если он существует, его можно удалить командой:
iptables -t filter -D FORWARD -j REJECT --reject-with icmp-host-prohibited
Также,вы можете прочитать статьи о включении переадресации в ufw
в Интернете. Вот два [1][2] примера.