Для моей работы у нас есть пространство тестирования с сервером Ubuntu, который является также маршрутизатором. Вчера мы поместили новое в стойку, и наше значение должно было сделать ее веб-сервером, который доступен из Интернета. Сервер/маршрутизатор Ubuntu был только маршрутизатором сначала, который перенаправляет трафик изнутри к внешней стороне, и это был сервер DHCP.
Чтобы заставить маршрутизатор направить к Интернету, мы использовали iptables
для NAT:
*nat
:PREROUTING ACCEPT [323:23056]
:INPUT ACCEPT [59:6795]
:OUTPUT ACCEPT [31:2677]
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -o eth5 -j MASQUERADE
-A POSTROUTING -o eth2 -j MASQUERADE
COMMIT
*filter
:INPUT ACCEPT [278:36336]
:FORWARD ACCEPT [18603:9408689]
:OUTPUT ACCEPT [105:12060]
-A INPUT -i lo -j ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
COMMIT
Теперь мы хотим перенаправить некоторый трафик к веб-серверу, но у нас есть несколько общедоступных IP-адресов. Мы хотим направить весь трафик к IP-адресу xxx.xxx.xxx.14 к внутреннему IP-адресу 10.10.10.10.
Я пытался применить следующие правила в iptables
:
iptables -t nat -A PREROUTING -d xxx.xxx.xxx.14 -j DNAT --to 10.10.10.10
iptables -t nat -A POSTROUTING -s 10.10.10.10 -j SNAT --to-source xxx.xxx.xxx.14
Но это, кажется, не добивается цели.
Так как мои навыки Ubuntu/Linux являются очень низкими, я не делаю точно, что я делаю неправильно. Кто-то может помочь мне с моей проблемой?
Значение состоит в том, что весь трафик к IP xxx.xxx.xxx.14 перенаправляется к 10.10.10.10. Все другие передают трафик, не должен быть затронут и может быть перенаправлен как нормальный трафик NAT к eth5
.
eth2
внешний порт Ethernet. eth5
внутренний порт Ethernet.
Проверьте, включена ли IP передача, и если не затем включают его.
$ cat /proc/sys/net/ipv4/ip_forward
1
$ sudo su
# echo "1" > /proc/sys/net/ipv4/ip_forward
# exit
exit
$
РЕДАКТИРОВАНИЕ: хорошо. таким образом, ip_forward включен.
затем удаляют строку, которая действительно ПОДМЕНЯЕТ к eth5.
удостоверяются, что Ваша определенная команда POSTROUTING находится в наборе правила перед универсальным. Я говорю что это:
iptables -t nat -A POSTROUTING -s 10.10.10.10 -j SNAT --to-source xxx.xxx.xxx.14
, возможно, должен был бы быть этим:
iptables -t nat -I 1 POSTROUTING -s 10.10.10.10 -j SNAT --to-source xxx.xxx.xxx.14
(или подобный, я не проверял синтаксис) или если у Вас есть весь основной набор правила, поместите его перед другим.
Примечания:
С правилами политики по умолчанию ПРИНИМАЮТ, Вам не нужно Ваше условное выражение, ПРИНИМАЕТ.