Назад | Перейти на главную страницу

Простое перенаправление портов

Я искал, искал и пробовал несколько разных вещей и не смог найти решение.

Вот моя ситуация:

узел1 имеет 2 интерфейса: eth0 (Публичный IP: 56.X.X.X), и eth1 (Частный IP: 10.X.X.X)

узел2 имеет 2 интерфейса: eth0 (Публичный IP: 56.X.X.X), и eth1 (Частный IP: 10.X.X.X)

На каждом узле работает Ubuntu 10.04 LTS.

Из этой настройки узел1 и узел2 у каждого есть доступ к Интернету, но они также могут подключаться друг к другу через локальную сеть.

Я хочу добиться узел1 быть брандмауэр и прокси-сервер для узел2 и многие другие узлы, которые я разверну позже. узел1 будет иметь единственный доступ в Интернет, так как я отключу eth0 на узел2 так что узел2 имеет доступ только ко всему в своей частной сети.

Проще говоря, как я могу переслать www запрос, который входит узел1 и дальше eth0 и переслать его узел2 с помощью eth1 пока узел2 будет действовать как веб-сервер для этого запроса?

Следуя приведенному ниже примеру, вот мой iptables -L:

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  anywhere             10.182.43.193       state NEW tcp dpt:www 
ACCEPT     tcp  --  anywhere             10.182.43.193       state NEW tcp dpt:https 
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED 

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Вот мой iptables -t nat -L

Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
DNAT       all  --  anywhere             firewall            to:10.182.43.193 

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination

Я назначу несколько произвольных IP-адресов, чтобы прояснить это. Подставьте свои настоящие адреса.

узел1 eth0: 56.0.0.1 узел1 eth1: 10.0.0.1 узел2 eth0: 56.0.0.2 узел2 eth1: 10.0.0.2

Если node1 должен быть вашим шлюзом / брандмауэром, вам нужно запустить iptables для обработки NAT / пересылки.

# iptables config on node1
# set up a destination nat from 56.0.0.2 to 10.0.0.2
iptables -t nat -A PREROUTING -d 56.0.0.2 -j DNAT --to-destination 10.0.0.2
# open port 80/443
iptables -A INPUT -d 10.0.0.2 -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT 
iptables -A INPUT -d 10.0.0.2 -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
# related/established traffic
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 

Вам не нужно настраивать eth0 на node2. Скорее, вам нужно настроить IP-адрес 56.0.0.2 на node1, чтобы использовать его однозначно для сопоставления с node2.

Если предполагается, что node2 имеет собственный IP-адрес, тогда вам не нужна переадресация портов, вам понадобится прокси-ARP и маршрутизация.

На node2 отключите eth0 и добавьте публичный IP-адрес к любому другому интерфейсу, например:

ip addr add 56.0.0.2/32 dev eth1

На node1 настройте маршрут к node2 через eth1:

ip route add 56.0.0.2 dev eth1

и включите ARP-ответы прокси на eth0 (чтобы node1 отвечал на ARP-запросы для node2):

echo 1 > /proc/sys/net/ipv4/conf/eth0/proxy_arp

Это заставит весь трафик к node2 проходить через node1. Затем вы можете настроить правила iptables, чтобы ограничить его, как и любой другой перенаправляемый трафик. Это не делает прокси на уровне приложения, но вы все равно можете добиться этого с помощью правил iptables.

Их постоянная установка обычно зависит от дистрибутива, я недостаточно хорошо знаю Ubuntu, но параметр proxy_arp, вероятно, можно установить в /etc/sysctl.conf:

net.ipv4.conf.eth0.proxy_arp = 1

IP-адрес на узле eth1 должен быть добавлен в конфигурацию интерфейса (но без какой-либо сетевой маски! Или с длиной префикса '/ 32'), также должно быть место для размещения статических маршрутов (/ etc / sysconfig / static-routes на моем система).