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

iptables: Как пересылать пакеты с портом назначения 80 с eth0 на eth1?

У меня есть трафик http и https, поступающий с нескольких машин на мой eth0 на моем компьютере с Linux, но я хочу перенаправить этот трафик на eth1, у которого есть доступ к Интернету. И выполните дополнительную операцию: трафик, исходящий от 80 и 443, будет перенаправлен с eth1 на eth0, чтобы он достиг машин, которые создали веб-запросы.

Я пробовал следующие команды iptables, но это не помогло:

iptables -A FORWARD -p tcp --dport 80 -o eth1 -j ACCEPT
iptables -A FORWARD -p tcp --sport 80 -o eth0 -j ACCEPT

Я не знаю, как это сделать.

=====================

Выход ip addr show

$ /sbin/ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether <mac_address_of_eth0> brd ff:ff:ff:ff:ff:ff
    inet 10.10.12.131/24 brd 10.10.12.255 scope global eth0
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether <mac_address_of_eth1> brd ff:ff:ff:ff:ff:ff
    inet 172.16.1.1/24 brd 172.16.1.255 scope global eth1

Во-первых, это очень похожий на пересылка iptables между двумя интерфейсами.

При этом вы хотите, чтобы ваш хост стал шлюзом, но более конкретно, только для протоколов. HTTP и HTTPS (80/443). Для этого вам следует:

  1. Уметь перенаправлять трафик между этими двумя интерфейсами
  2. Пересылать пакеты с портом назначения 80 (HTTP)
  3. Пересылать пакеты через порт назначения 443 (HTTPS)
  4. Так как iptables (netfilter) это stateless packet filtering system, принять пакеты, которые возвращаются
  5. Source NAT (измените исходный IP-адрес) на IP-адрес вашего хоста

В переводе на iptables:

echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -A FORWARD -i eth0 -o eth1 -p tcp --dport 80  -j ACCEPT
iptables -A FORWARD -i eth0 -o eth1 -p tcp --dport 443 -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -m state --state ESTABLISHED,RELATED \
   -j ACCEPT
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE

При условии, что другие хосты в вашей сети используют ваш хост для выхода в Интернет (это означает, что ваш Linux-сервер работает как шлюз).

Предполагая, что у eth1 есть общедоступный интернет-адрес, похоже, вы хотите, чтобы ваш Linux-сервер стал маршрутизатором, возможно, с функцией NAT / Masquerade. Видеть http://www.howtoforge.com/internet-connection-sharing-masquerading-on-linux для одного из многих примеров.

IPtables, который вы дали просто позволять HTTP-трафик, который должен быть перенаправлен через ваш Linux-сервер, если он прибудет, но вам нужно будет убедиться, что ваши клиенты используют ваш Linux-сервер в качестве шлюза, чтобы это произошло.