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

ubuntu перенаправить порт на другую машину

Я выполняю миграцию серверов и хочу перенаправить порт 80 на моем существующем компьютере на порт 80 на новом компьютере, пока DNS переключается.

Я запускаю сервер Ubuntu 10.04 и пытаюсь следовать руководству на http://www.simplehelp.net/2009/04/15/how-to-redirect-traffic-to-another-machine-in-linux/

Я бегал

# echo 1 >/proc/sys/net/ipv4/ip_forward

Но когда я запускаю следующую команду, я получаю сообщение об ошибке:

#iptables -t nat -D PREROUTING -p tcp --dport 80 -j DNAT --to-destination 122.164.34.240
iptables: No chain/target/match by that name.

Кажется, у меня нет там нат-таблицы. Вот результат iptables -L:

iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Нет нац таблицы.

Что мне нужно сделать, чтобы переслать его на другую машину?

Примечание: я знаю о rinetd, и я даже могу получать запросы прокси веб-сервера к новому серверу. Я пытаюсь сделать это, чтобы журналы по-прежнему имели смысл (вместо того, чтобы иметь тонну журналов, в которых говорится, что исходный IP-адрес был старым сервером)

Изменить: Благодаря Эдуардо проблема заключалась в том, что в руководстве по ошибке написано «-D PREROUTING», которое является командой для удаления правила, оно должно читать «-A PREROUTING».

Однако это все еще не работает. Вот что я делаю: машина-1: 192.168.56.150 машина-2: 192.168.56.151 Я хочу перенаправить машину-1 на машину-2. На машине-1 пробегал:

echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.56.151

На машине-2 пробегал:

echo 1 > /proc/sys/net/ipv4/ip_forward #not sure if this is necessary, it didn't work at first so I ran this here too
iptables -t nat -A POSTROUTING -p tcp -d 192.168.56.151 --dport 80 -j MASQUERADE

На своей рабочей станции я пытаюсь wget http://192.168.56.150 ожидая, что он даст ответ от машины-2 (и эта машина-2 будет иметь IP-адрес моей рабочей станции в своих журналах), однако я просто получаю время ожидания соединения. Я проверил машину-2, она правильно реагирует.

Оба правила iptables должны работать на старой машине-1. На новой машине-2 особых правил не требуется.

Чтобы устранить неполадки, посмотрите на счетчики в iptables -t nat -L -n -v вывод и использование tcpdump а также для проверки правильности перевода адресов.

Использование MASQUERADE может вызвать непредвиденные проблемы. Этого не должно быть, но по опыту я обнаружил, что использование SNAT намного надежнее.

Обычно я бы реализовал это с помощью небольшого сценария bash, например:

#!/bin/bash

OLDIP=192.168.5.5
NEWIP=192.168.56.151
PORT=80

echo 1 > /proc/sys/net/ipv4/ip_forward

# flush old nat rules
iptables -F -t nat

# destination is redirected to new server
iptables -t nat -A PREROUTING -p tcp --dport 80 -d $OLDIP -j DNAT --to $NEWIP

# source on the redirected packets should be us (the old server), and not original client
iptables -t nat -A POSTROUTING -p tcp --sport 80 -d $NEWIP -j SNAT --to $OLDIP

Однако эти правила могут быть немного жадными; было бы лучше указать интерфейсы, используя -i и -o, если это возможно.

Попробуйте заменить -D PREROUTING с участием -A PREROUTING. Вы пытаетесь удалить несуществующее правило. Я вижу, в учебнике эта же ошибка повторяется несколько раз - просто используйте -A где угодно.

Также вы можете использовать iptables -nvL -t nat чтобы увидеть таблицы NAT.