Вопрос: Как переносить данные с помощью iptables?
Я хочу, чтобы соединения, входящие на ppp0 на порт 8001, были перенаправлены на 192.168.1.200 по eth0 на порт 8080.
У меня эти два правила
-A PREROUTING -p tcp -m tcp --dport 8001 -j DNAT --to-destination 192.168.1.200:8080
-A FORWARD -m state -p tcp -d 192.168.1.200 --dport 8080 --state NEW,ESTABLISHED,RELATED -j ACCEPT
и это не сработает. Что мне не хватает?
107
2017-12-05 21:06
Источник
Ответы:
Прежде всего - вы должны проверить, разрешено ли пересылка:
cat /proc/sys/net/ipv4/conf/ppp0/forwarding
cat /proc/sys/net/ipv4/conf/eth0/forwarding
Если оба возвращаются 1
все нормально. Если не выполните следующие действия:
echo '1' | sudo tee /proc/sys/net/ipv4/conf/ppp0/forwarding
echo '1' | sudo tee /proc/sys/net/ipv4/conf/eth0/forwarding
Второе - DNAT
может применяться nat
только таблица. Итак, ваше правило должно быть расширено, добавив также спецификацию таблицы (-t nat
):
iptables -t nat -A PREROUTING -p tcp -i ppp0 --dport 8001 -j DNAT --to-destination 192.168.1.200:8080
iptables -A FORWARD -p tcp -d 192.168.1.200 --dport 8080 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
Оба правила применяются только к TCP-трафику (если вы хотите также изменить UDP, вам необходимо предоставить аналогичные правила, но -p udp
набор опций).
Последняя, но не менее важная конфигурация маршрутизации. Тип:
ip route
и проверьте, 192.168.1.0/24
среди возвращенных записей маршрутизации.
88
2018-03-24 11:24
Я думаю, что вы хотите:
iptables -A FORWARD -m state -p tcp -d 192.168.1.200 --dport 8080 --state
NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A PREROUTING -p tcp --dport 8001 -j DNAT --to-destination
192.168.1.200:8080
14
2017-12-05 21:43
Вы забываете адрес источника postrouting SNAT 'ing:
sysctl net.ipv4.ip_forward=1
yours_wan_ip=101.23.3.1
-A PREROUTING -p tcp -m tcp -d $yours_wan_ip --dport 8001 -j DNAT --to-destination 192.168.1.200:8080
-A FORWARD -m state -p tcp -d 192.168.1.200 --dport 8080 --state NEW,ESTABLISHED,RELATED -j ACCEPT
-A POSTROUTING -t nat -p tcp -m tcp -s 192.168.1.200 --sport 8080 -j SNAT --to-source $yours_wan_ip
И не забудьте установить ваш брандмауэр linux в качестве шлюза по умолчанию на компьютере с адресом 192.168.1.200.
12
2018-06-09 11:09
Я создал следующий скрипт bash для этого на моем маршрутизаторе linux. Он автоматически передает WAN IP и подтверждает выбор, прежде чем продолжить.
#!/bin/bash
# decide which action to use
action="add"
if [[ "-r" == "$1" ]]; then
action="remove"
shift
fi
# break out components
dest_addr_lan="$1"
dest_port_wan="$2"
dest_port_lan="$3"
# figure out our WAN ip
wan_addr=`curl -4 -s icanhazip.com`
# auto fill our dest lan port if we need to
if [ -z $dest_port_lan ]; then
dest_port_lan="$dest_port_wan"
fi
# print info for review
echo "Destination LAN Address: $dest_addr_lan"
echo "Destination Port WAN: $dest_port_wan"
echo "Destination Port LAN: $dest_port_lan"
echo "WAN Address: $wan_addr"
# confirm with user
read -p "Does everything look correct? " -n 1 -r
echo # (optional) move to a new line
if [[ $REPLY =~ ^[Yy]$ ]]; then
if [[ "remove" == "$action" ]]; then
iptables -t nat -D PREROUTING -p tcp -m tcp -d $wan_addr --dport $dest_port_wan -j DNAT --to-destination $dest_addr_lan:$dest_port_lan
iptables -D FORWARD -m state -p tcp -d $dest_addr_lan --dport $dest_port_lan --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -D POSTROUTING -p tcp -m tcp -s $dest_addr_lan --sport $dest_port_lan -j SNAT --to-source $wan_addr
echo "Forwarding rule removed"
else
iptables -t nat -A PREROUTING -p tcp -m tcp -d $wan_addr --dport $dest_port_wan -j DNAT --to-destination $dest_addr_lan:$dest_port_lan
iptables -A FORWARD -m state -p tcp -d $dest_addr_lan --dport $dest_port_lan --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A POSTROUTING -p tcp -m tcp -s $dest_addr_lan --sport $dest_port_lan -j SNAT --to-source $wan_addr
echo "Forwarding rule added"
fi
else
echo "Info not confirmed, exiting..."
fi
Использование скрипта просто просто скопируйте и вставьте его в файл, а затем.
# chmod +x port_forward.sh
# ./port_forward.sh 192.168.1.100 3000
... confirm details ... press y
# Forwarding rule added
Чтобы удалить одно и то же правило
# ./port_forward.sh -r 192.168.1.100 3000
... confirm details ... press y
# Forwarding rule removed
Я думал, что это может сэкономить время на своем маршрутизаторе.
5
2017-12-14 22:02
Пытаться
echo "1" > /proc/sys/net/ipv4/conf/ppp0/forwarding
echo "1" > /proc/sys/net/ipv4/conf/eth0/forwarding
Эти файлы сообщают ядру, что разрешено пересылать пакеты между интерфейсами.
1
2017-12-10 02:58
У меня была задача заставить MACHINE_A думать, что служба работает физически на MACHINE_B, но прозрачно перенаправляет все запросы на MACHINE_C.
Хитрость заключалась в использовании MASQUERADE.
sysctl net.ipv4.ip_forward=1
iptables -t nat -A PREROUTING -p tcp -d MACHINE_B --dport 443 -j DNAT --to-destination MACHINE_C
iptables -t nat -A POSTROUTING -s MACHINE_A -o INTERFACE_NAME -j MASQUERADE
Обратите внимание, что вы можете настроить команды:
Чтобы разрешить пересылку пакетов только на конкретном интерфейсе. Например:
sysctl net.ipv4.conf.eth0.forwarding=1
Чтобы не только MACHINE_A, но и все остальные использовать переадресацию портов, удалите:
-s MACHINE_A
0
2018-03-17 09:02
Эта команда не работает для меня:
-A POSTROUTING -t nat -p tcp -m tcp -s 192.168.1.200 --sport 8080 -j SNAT --to-source $yours_wan_ip
У меня есть 2 интерфейса LAN и FORWARD, когда я напишу:
iptables -t nat -A POSTROUTING -o $LAN_IF -p tcp -m tcp --dport $FW_PORT -j SNAT --to-source $LAN_IP
- LAN_IF - интерфейс LAN (например, eth1, br0 ...)
- FW_PORD - переадресованный порт (на удаленном хосте)
- LAN_IP - IP-адрес в интерфейсе LAN (на маршрутизаторе)
Разумеется, нужны и PREROUTING, и FORWARD :)
0
2018-05-24 12:04