iptables ошибка прямого порта - нет цепочки / цели / соответствия этим именем

9

Я пытаюсь настроить iptables на моем сервере Ubuntu 12.04 LTS для пересылки портов с 443 по 8443.

Но когда я запускаю эту команду:

sudo iptables -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-ports 8443

Я получаю следующую ошибку:

iptables: No chain/target/match by that name.

Моя текущая конфигурация iptables:

$ sudo iptables -L

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:https
DROP       tcp  --  anywhere             anywhere             tcp dpt:http

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination 

Что мне не хватает или что-то не так?

    
задан Roy Hinkley 30.06.2016 в 18:39
источник

3 ответа

15

Так как цепочка PREROUTING принадлежит таблице NAT , а не таблице FILTER . Если вы не укажете какую-либо таблицу явно с помощью опции -t , тогда предполагается FILTER .

Итак, вам нужно указать тип таблицы с -t nat :

sudo iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-ports 8443

Обратите внимание, что таблицы MANGLE и RAW также имеют цепочку PREROUTING , но поскольку вы перенаправляете только порты, вы, вероятно, ищете таблицу NAT .

    
ответ дан heemayl 30.06.2016 в 18:46
источник
3

Цепочка PREROUTING доступна только для nat, mangle и raw tables.
iptables принимает таблицу фильтров, поэтому вы должны указать один из них, например. iptables -t nat ...

    
ответ дан Ven3k 30.06.2016 в 18:47
3

Я получаю подобную ошибку, когда я запускаю команду docker

docker run -d -p 8084:8080 knockdata/zeppelin-highcharts


d9c5d34f500d621585470b0e70b915395fcb6b3437859e0f610dbb58d51faf25
docker: Error response from daemon: driver failed programming external connectivity on endpoint elegant_jang  
(7ca0f5ad689f5443ce7533f66b4a86c34d2dbd9d076bac4812288dd3f6a76698):  
iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 8084 -j DNAT --to-destination 172.17.0.2:8080 
! -i docker0: iptables: No chain/target/match by that name.
(exit status 1).

Я смог его исправить, переустановив docker-engine

apt-get remove docker-engine
apt-get install docker-engine
    
ответ дан Rockie Yang 29.09.2016 в 07:22