У меня проблема с пересылкой трафика с одного интерфейса на другой. Похоже, мои правила пересылки не соблюдаются.
sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1
Вот как выглядит моя IPtable:
Chain INPUT (policy ACCEPT 60 packets, 8184 bytes)
pkts bytes target prot opt in out source destination
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 LOG all -- any any 192.168.0.0/24 anywhere LOG level warning
0 0 ACCEPT all -- eth0 tun0 192.168.0.0/24 anywhere ctstate NEW
Chain OUTPUT (policy ACCEPT 82 packets, 11632 bytes)
pkts bytes target prot opt in out source destination
Я хочу, чтобы все, что идет с 192.168.0.0/24, было перенаправлено на интерфейс tun0. И я хочу, чтобы перенаправленный трафик регистрировался.
Теперь, если я продолжу и настрою следующую команду:
ping 10.8.0.2
PING 10.8.0.2 (10.8.0.2) 56(84) bytes of data.
64 bytes from 10.8.0.2: icmp_req=1 ttl=64 time=1974 ms
64 bytes from 10.8.0.2: icmp_req=2 ttl=64 time=1069 ms
64 bytes from 10.8.0.2: icmp_req=3 ttl=64 time=669 ms
64 bytes from 10.8.0.2: icmp_req=4 ttl=64 time=670 ms
Однако если я это сделаю:
ping 10.8.0.2 -I eth0
PING 10.8.0.2 (10.8.0.2) from 192.168.0.10 eth0: 56(84) bytes of data.
From 192.168.0.10 icmp_seq=1 Destination Host Unreachable
From 192.168.0.10 icmp_seq=2 Destination Host Unreachable
From 192.168.0.10 icmp_seq=3 Destination Host Unreachable
Трафик не перенаправляется. Есть идеи, почему? Я что-то упустил?
Вы не можете тестировать пересылку таким образом, поскольку пакеты, исходящие от сервера, который вы используете в качестве пересылки, никогда не проходят через эту цепочку.
Но настоящая проблема здесь в том, что вы пересылаете только НОВЫЕ соединения, что неверно. Это приведет к тому, что оператор будет работать только в первый раз, когда ваш сервер увидит соединение. Все после этого больше не пересылается.
Дадриэль отлично замечает, что локальный трафик не проходит через FORWARD
цепи, но у вас есть более фундаментальная проблема: это не то, как iptables
правила работают. Они не решают как пакет должен быть отправлен (по крайней мере, не легко), они решают будь то его следует переслать. Ваши правила выше регистрируют и разрешают любые NEW
трафик, который исходит из 192.168.0.0/24
и уезжает через tun0
, но они не заставляют движение, отвечающее первым критериям, двигаться по второму маршруту.
В таблицы маршрутизации решить, как будет перенаправляться трафик, и это звучит так, как будто вы хотите маршрутизация на основе политик (т. е. выбор способа маршрутизации должен основываться на чем-то другом, кроме IP-адреса назначения - в вашем случае, на исходном IP-адресе).
Вы должны изучить iproute2
.