LINUX.ORG.RU
ФорумAdmin

Iptables

 


0

1

Всем привет. Который день бьюсь проблемой, не могу создать локальную сеть между удаленными серверами. Помогите, кто разбирается с iptables.

Имеется 2 сетевые карты на моем ПК.

1 карта подключена к роутеру с интернетом.

2 карта подключена напрямую и будет использоваться для вирт.сервера.

Поставил сервер на VMware Workstation Pro 14 Centos 7.

Подключил провод к второй сетевой карте.

В настройках VMware для вирт.машины, выбрал 2 сетевую карту. Захожу на вирт.машину, создаю pppoe соединение, подключился, интернет есть, запустил необходимые службы, все работает из интернета службы видны.

Второй физический сервер располагается в другом городе, имеет прямое подключение к интернету (без pppoe), поставил Centos, запустил те же службы, все работает из интернета службы видны. Теперь необходимо, чтобы с физического сервера перенаправлялись запросы на вирт.сервер.

Конфигурация:

1 вирт.сервер имеет конфигурацию сети:

[root@localhost ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.55.4.184  netmask 255.255.255.192  broadcast 10.55.4.191
        inet6 fe80::1b2c:c69d:522e:beba  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:cd:92:3b  txqueuelen 1000  (Ethernet)
        RX packets 126351071  bytes 10576512821 (9.8 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 176185945  bytes 34057531043 (31.7 GiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1  (Local Loopback)
        RX packets 12649  bytes 1025324 (1001.2 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 12649  bytes 1025324 (1001.2 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ppp0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST>  mtu 1492
        inet 91.188.116.198  netmask 255.255.255.255  destination 217.228.116.117
        ppp  txqueuelen 3  (Point-to-Point Protocol)
        RX packets 126285075  bytes 7793004231 (7.2 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 176168624  bytes 30180710885 (28.1 GiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
2 физический сервер имеет конфигурацию сети:
[root@localhost ~]# ifconfig
eth0      Link encap:Ethernet  HWaddr 52:54:00:8A:EF:8E
          inet addr:92.226.92.226  Bcast:92.226.95.255  Mask:255.255.252.0
          inet6 addr: fe80::5054:ff:fe8a:ef8e/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:555044 errors:0 dropped:0 overruns:0 frame:0
          TX packets:86459 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:35042486 (33.4 MiB)  TX bytes:154412410 (147.2 MiB)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)
Что я предпринимал: Создаю файл на вирт.сервере tun0.sh:
#!/bin/sh
/sbin/iptunnel del tun
/sbin/iptunnel add tun mode gre remote 92.226.92.226 local 91.188.116.198 ttl 225
/sbin/ifconfig tun 10.0.0.2/24
/sbin/ifconfig tun up
/sbin/ifconfig tun pointopoint 10.0.0.1
/sbin/ifconfig tun multicast
/sbin/ip route add 10.0.0.0/24 dev tun src 10.0.0.2 table table4
/sbin/ip route add table table4 default via 10.0.0.1 dev tun
/sbin/ip rule add from 10.0.0.2 table table4
/sbin/ip rule add fwmark 4 table table4
sysctl -w net.ipv4.ip_forward=1
iptables -t nat -A PREROUTING -d 10.0.0.2 -p udp -m udp --dport 1999 -j CONNMARK --set-mark 4
iptables -t nat -A PREROUTING -d 10.0.0.2 -p udp -m udp --dport 1999 -j DNAT --to-destination 91.188.116.198:1999
iptables -t mangle -A OUTPUT -s 91.188.116.198 -p udp -j CONNMARK --restore-mark
Создаю на физическом сервер аналогичный файл
#!/bin/sh
/sbin/iptunnel del tun
/sbin/iptunnel add tun mode gre remote 91.188.116.198 local 92.226.92.226 ttl 225
/sbin/ifconfig tun 10.0.0.1/24
/sbin/ifconfig tun up
/sbin/ifconfig tun pointopoint 10.0.0.2
/sbin/ifconfig tun multicast
iptables -t nat -A PREROUTING -d 92.226.92.226 -p udp -m udp --dport 2999 -j DNAT --to-destination 10.0.0.2:1999
iptables -t mangle -A OUTPUT -p udp -s 92.226.92.226 -j CONNMARK --restore-mark
sysctl -w net.ipv4.ip_forward=1
Запускаю эти бантики на обеих серверах и пробую пинговать при вкл iptables. На вирт.сервере
[root@localhost ~]# ping 10.0.0.1
PING 10.0.0.1 (10.0.0.1) 56(84) bytes of data.
From 10.0.0.2 icmp_seq=2 Destination Host Unreachable
From 10.0.0.2 icmp_seq=3 Destination Host Unreachable
From 10.0.0.2 icmp_seq=4 Destination Host Unreachable
На физ.сервере
[root@localhost ~]# ping 10.0.0.2
PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
И висит бесконечно.

Если выкл iptables на обеих машинах то они пингуют друг друга, в чем может быть проблема?

Если надо еще какую информацию, спрашивайте, скину.


Проблема в iptables, ваш К.О. :-) но не в тех правилах, что вы прописываете из скриптов, а в остальных, которые там есть по умолчанию, когда сервис запущен.

В целом мне не понятно, зачем вы поднимаете тунель из скрипта (да ещё с помощью ifconfig, а не ip) и зачем из скрипта прописываете правила iptables. GRE-тунель обычно поднимался штатными настройками, и правила iptables в вашем случае можно прописать один раз, ничего динамического у вас там нет.

Смотрите вывод iptables-save и разрешайте нужные пакеты (udp, icmp).

P.S. В целом не понятно, зачем вам перенаправление 10.0.0.2 -> 91.188.116.198, обычные службы могут принимать соединение на любой адрес. И тогда вам не нужно будет fwmark, хватит ″ip rule src″.

mky ★★★★★
()
Ответ на: комментарий от mky

Мне необходимо перенаправлять все запросы на порт 1999 на вирт.сервер. Это пока тесты, потом буду без скриптика настраивать.

Мне нужно понять, почему не работает таким методом. Данный скрипт мне дал знакомый и у него все работает.

[root@localhost ~]# iptables-save
# Generated by iptables-save v1.4.7 on Sun Dec 31 14:05:49 2017
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [10270096:26865152934]
:f2b-sshd - [0:0]
-A INPUT -p tcp -m multiport --dports 22 -j f2b-sshd
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m conntrack --ctstate NEW -m multiport --dports 20:22,80,443 -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
-A f2b-sshd -j RETURN
COMMIT
# Completed on Sun Dec 31 14:05:49 2017
# Generated by iptables-save v1.4.7 on Sun Dec 31 14:05:49 2017
*mangle
:PREROUTING ACCEPT [11585591:528219540]
:INPUT ACCEPT [11585590:528219487]
:FORWARD ACCEPT [1:53]
:OUTPUT ACCEPT [10270098:26865153350]
:POSTROUTING ACCEPT [10270098:26865153350]
-A OUTPUT -s 92.226.92.226/32 -p udp -j CONNMARK --restore-mark --nfmask 0xffffffff --ctmask 0xffffffff
COMMIT
# Completed on Sun Dec 31 14:05:49 2017
# Generated by iptables-save v1.4.7 on Sun Dec 31 14:05:49 2017
*nat
:PREROUTING ACCEPT [128262:6830399]
:POSTROUTING ACCEPT [39246:2860266]
:OUTPUT ACCEPT [39246:2860266]
-A PREROUTING -d 92.226.92.226/32 -p udp -m udp --dport 2999 -j DNAT --to-destination 10.0.0.2:1999
COMMIT
# Completed on Sun Dec 31 14:05:49 2017

Я как понял, проблема в этом?

-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited

People
() автор топика
Ответ на: комментарий от People

Какая-то странная мода пошла, нарыть большой скрипт/программу, и вместо того, чтобы по шагам найти где ломается прибежать на форум с вопросом, что тут в этой портянке, так же полученной совершенно таким же странным методом компиляцией каких-то не относящихся к делу примеров.

Я как понял, проблема в этом?

В чём проблема попробовать без этого? У вас политики INPUT/FORWARD разрешающие, DNAT сконфигурён, делов то было, вначале попробовать, а потом уже написать сюда.

vodz ★★★★★
()
Последнее исправление: vodz (всего исправлений: 1)
Ответ на: комментарий от vodz

Так почему сервера друг друга не видят? Пингую с вирт.сервера

[root@localhost ~]# ping 10.0.0.1
PING 10.0.0.1 (10.0.0.1) 56(84) bytes of data.
From 10.0.0.2 icmp_seq=2 Destination Host Unreachable
From 10.0.0.2 icmp_seq=3 Destination Host Unreachable
From 10.0.0.2 icmp_seq=4 Destination Host Unreachable
Со второго сервера
[root@localhost ~]# ping 10.0.0.2
PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
Пытаюсь зайти через 92.226.92.226:2999, он не перенаправляет на вирт.сервер.

People
() автор топика
Ответ на: комментарий от People

Так

Что так? Причём тут пинг вообще, если вы речь вели о 1999 порту?

Пытаюсь зайти через 92.226.92.226:2999

Что за 2999? Вы уже пробовали убрать всё из ваших правил, что вы не понимаете и оставить только нужный вам DNAT для 1999?

vodz ★★★★★
()
Последнее исправление: vodz (всего исправлений: 1)
Ответ на: комментарий от People

Для пингов правила с REJECT не проблема, у вас в INPUT разрешён icmp и всё разрешено в OUTPUT. Правило с REJECT в FORWARD будет проблемой для udp-пакетов, которые вы хотите перенаправить.

Пока что разбираемся с icmp, что с правилами iptables на виртуальном сервере?

P.S. Правило iptables -t mangle -A OUTPUT -p udp -s 92.226.92.226 -j CONNMARK --restore-mark на физ. сервере явно лишнее, у вас там вобще нет маркировки пакетов/сессий, нет смысла и метку восстанавливать. Ничего страшного оно не делает, просто лишнее.

mky ★★★★★
()
Ответ на: комментарий от People

Вы вообще читали первый пост? Судя по Вашему посту - нет.

Я читал. В три, блджад, захода. Там какая-то лапша из серверов, виртуальных машин и чёрт знает куда воткнутых сетевых карт. И локальная сеть между городами.

anonymous
()
Ответ на: комментарий от mky

На вирт.сервере

root@cs:~# iptables-save
# Generated by iptables-save v1.4.21 on Mon Jan  1 08:56:41 2018
*filter
:INPUT ACCEPT [166724:8208542]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [198284:12862741]
:fail2ban-ssh - [0:0]
-A INPUT -p tcp -m multiport --dports 22 -j fail2ban-ssh
-A fail2ban-ssh -j RETURN
COMMIT
# Completed on Mon Jan  1 08:56:41 2018
# Generated by iptables-save v1.4.21 on Mon Jan  1 08:56:41 2018
*mangle
:PREROUTING ACCEPT [166692:8205359]
:INPUT ACCEPT [166692:8205359]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [193408:12552410]
:POSTROUTING ACCEPT [193411:12552547]
-A FORWARD -o ppp0 -p tcp -m tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1400:65495 -j TCPMSS --clamp-mss-to-pmtu
COMMIT
# Completed on Mon Jan  1 08:56:41 2018
Даже если отключить iptables на той машине до которой пингуешь, все равно пинги не проходят, пинги проходят в обе стороны только в том случае, если iptables вырублен с обоих машин.

People
() автор топика
Ответ на: комментарий от People

Вы вообще читали первый пост?

Представьте себе - да. Собственно anonymous уже выше всё правильно сказал. Не умеете задачу делить на подзадачи, смешиваете всё в кучу, а потом удивляются, что с них просят наводящими вопросами узнать, понимают ли они вообще, что на что влияет и что вообще предпринималось, чтобы заставить работать последовательно одно за другим в вашей каше. Неужели не понятно, что файрвол - это такая вещь, что проще всего вначале всё разрешить, убедиться, что сеть работает, а только потом вводить правила переадресации и только потом уже ограничения. Проверяя на каждом шагу всё на предмет работоспособности.

vodz ★★★★★
()
Ответ на: комментарий от People

Запускайте с обоих сторон tcpdump на перехват icmp пакетов на tun интерфейсе:

tcpdump -i tun -n -nn icmp

поочерёдно запускаете пинги и смотрите при включенных iptables уходят ли icmp пакеты в тунель, выходят ли с другой стороны, уходит ли с другой стороны в тунель ответные icmp-пакеты и выходят ли они с этой стороны.

mky ★★★★★
()
Ответ на: комментарий от mky

Что имеем: Вирт.Сервер:

[root@localhost ~]# iptables-save
# Generated by iptables-save v1.4.21 on Tue Jan  2 01:36:51 2018
*mangle
:PREROUTING ACCEPT [13420:642830]
:INPUT ACCEPT [13419:642802]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [16549:1011863]
:POSTROUTING ACCEPT [16549:1011863]
-A OUTPUT -s 91.188.116.198/32 -p udp -j CONNMARK --restore-mark --nfmask 0xffffffff --ctmask 0xffffffff
COMMIT
# Completed on Tue Jan  2 01:36:51 2018
# Generated by iptables-save v1.4.21 on Tue Jan  2 01:36:51 2018
*nat
:PREROUTING ACCEPT [187:9862]
:INPUT ACCEPT [180:9570]
:OUTPUT ACCEPT [282:18445]
:POSTROUTING ACCEPT [282:18445]
-A PREROUTING -d 10.0.0.2/32 -p udp -m udp --dport 1999 -j CONNMARK --set-xmark 0x4/0xffffffff
-A PREROUTING -d 10.0.0.2/32 -p udp -m udp --dport 1999 -j DNAT --to-destination 91.188.116.198:1999
COMMIT
# Completed on Tue Jan  2 01:36:51 2018
# Generated by iptables-save v1.4.21 on Tue Jan  2 01:36:51 2018
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [98411112:20852656514]
:f2b-sshd - [0:0]
-A INPUT -p tcp -m multiport --dports 22 -j f2b-sshd
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m conntrack --ctstate NEW -m multiport --dports 35000:35999 -j ACCEPT
-A INPUT -p tcp -m conntrack --ctstate NEW -m multiport --dports 20:22,80,443 -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m udp --dport 1999 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
-A f2b-sshd -j RETURN
-A f2b-sshd -j RETURN
COMMIT
# Completed on Tue Jan  2 01:36:51 2018
Пингуем второй сервер
[root@localhost ~]# ping 10.0.0.1
PING 10.0.0.1 (10.0.0.1) 56(84) bytes of data.
From 10.0.0.2 icmp_seq=2 Destination Host Unreachable
From 10.0.0.2 icmp_seq=3 Destination Host Unreachable
From 10.0.0.2 icmp_seq=4 Destination Host Unreachable
--- 10.0.0.1 ping statistics ---
4 packets transmitted, 0 received, +3 errors, 100% packet loss, time 3008ms
В tcpdump
[root@localhost ~]# tcpdump -i tun -n -nn icmp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on tuncs, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
01:39:16.715817 IP 10.0.0.2 > 10.0.0.1: ICMP echo request, id 37138, seq 1, length 64
01:39:17.724414 IP 10.0.0.2 > 10.0.0.1: ICMP echo request, id 37138, seq 2, length 64
01:39:18.723864 IP 10.0.0.2 > 10.0.0.1: ICMP echo request, id 37138, seq 3, length 64
01:39:19.724508 IP 10.0.0.2 > 10.0.0.1: ICMP echo request, id 37138, seq 4, length 64
4 packets captured
4 packets received by filter
0 packets dropped by kernel
Маршрут
[root@localhost ~]# route -v
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         0.0.0.0         0.0.0.0         U     0      0        0 ppp0
10.0.0.0        0.0.0.0         255.255.255.0   U     0      0        0 tun
10.55.4.128     0.0.0.0         255.255.255.192 U     100    0        0 ens33
домен провайдера 0.0.0.0         255.255.255.255 UH    0      0        0 ppp0

Что имеем: Второй сервер:

[root@localhost ~]# iptables-save
# Generated by iptables-save v1.4.7 on Tue Jan  2 05:55:31 2018
*mangle
:PREROUTING ACCEPT [13058:672337]
:INPUT ACCEPT [13058:672337]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [23906:62119230]
:POSTROUTING ACCEPT [23906:62119230]
-A OUTPUT -s 92.226.92.226/32 -p udp -j CONNMARK --restore-mark --nfmask 0xffffffff --ctmask 0xffffffff
COMMIT
# Completed on Tue Jan  2 05:55:31 2018
# Generated by iptables-save v1.4.7 on Tue Jan  2 05:55:31 2018
*nat
:PREROUTING ACCEPT [392:20997]
:POSTROUTING ACCEPT [145:10572]
:OUTPUT ACCEPT [145:10572]
-A PREROUTING -d 92.226.92.226/32 -p udp -m udp --dport 2999 -j DNAT --to-destination 10.0.0.2:1999
COMMIT
# Completed on Tue Jan  2 05:55:31 2018
# Generated by iptables-save v1.4.7 on Tue Jan  2 05:55:31 2018
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [24049:62141133]
:f2b-sshd - [0:0]
-A INPUT -p tcp -m multiport --dports 22 -j f2b-sshd
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m conntrack --ctstate NEW -m multiport --dports 20:22,80,443 -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
-A f2b-sshd -j RETURN
-A f2b-sshd -j RETURN
COMMIT
# Completed on Tue Jan  2 05:55:31 2018
Пингуем вирт.сервер
[root@localhost ~]# ping 10.0.0.2
PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
--- 10.0.0.2 ping statistics ---
4 packets transmitted, 0 received, 100% packet loss, time 3374ms
В tcpdump
[root@localhost ~]# tcpdump -i tun -n -nn icmp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on tuncs, link-type LINUX_SLL (Linux cooked), capture size 65535 bytes
05:42:44.705649 IP 10.0.0.1 > 10.0.0.2: ICMP echo request, id 49158, seq 1, length 64
05:42:45.705513 IP 10.0.0.1 > 10.0.0.2: ICMP echo request, id 49158, seq 2, length 64
05:42:46.705488 IP 10.0.0.1 > 10.0.0.2: ICMP echo request, id 49158, seq 3, length 64
05:42:47.705498 IP 10.0.0.1 > 10.0.0.2: ICMP echo request, id 49158, seq 4, length 64
4 packets captured
4 packets received by filter
0 packets dropped by kernel
Маршрут
[root@localhost ~]# route -v
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.0.0.0        *               255.255.255.0   U     0      0        0 tun
92.226.92.0     *               255.255.252.0   U     0      0        0 eth0
link-local      *               255.255.0.0     U     1002   0        0 eth0
default         домен провайдера 0.0.0.0         UG    0      0        0 eth0

People
() автор топика
Ответ на: комментарий от People

tcpdump на обоих машинах в момент пинга одинаковый? То есть ICMP echo request пакеты видны на другом конце тунеля?

mky ★★★★★
()
Ответ на: комментарий от mky

При выкл iptables все пингуется с обеих сторон.

People
() автор топика
Ответ на: комментарий от mky

Я не правильно сделал. Вот Вирт.Сервер:

[root@localhost ~]# ping 10.0.0.1
PING 10.0.0.1 (10.0.0.1) 56(84) bytes of data.
From 10.0.0.2 icmp_seq=2 Destination Host Unreachable
From 10.0.0.2 icmp_seq=3 Destination Host Unreachable
From 10.0.0.2 icmp_seq=4 Destination Host Unreachable
--- 10.0.0.1 ping statistics ---
4 packets transmitted, 0 received, +3 errors, 100% packet loss, time 3008ms
На втором сервере
[root@localhost ~]# tcpdump -i tun -n -nn icmp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on tuncs, link-type LINUX_SLL (Linux cooked), capture size 65535 bytes
Т.е пусто.

На втором сервере:

[root@localhost ~]# ping 10.0.0.2
PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
и висит.

На вирт.сервере

[root@localhost ~]# tcpdump -i tun -n -nn icmp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on tuncs, link-type LINUX_SLL (Linux cooked), capture size 65535 bytes
Т.е пусто.

Вообщем пакеты не идут.

People
() автор топика
Ответ на: комментарий от People

Точно, вам же в INPUT, до REJECT правил, надо добавить разрешние на GRE-пакеты, иначе у вас фактически тунеля нет. Можно в самое начало, так как там будет много пакетов и чем меньше правил iptables они пройдут, тем должно быть быстрее:

iptables -I INPUT -p GRE -j ACCEPT

можно и с указанием конкретных src-адресов, хотя особо без разницы.

mky ★★★★★
()
Ответ на: комментарий от mky

Если запустить на втором сервере

tcpdump -i eth0 dst 92.226.92.226 and port 2999 

И сделать проверку с интернета

То мы видим, что пакеты поступают

00:02:23.146283 IP 195.58.115.119.33447 > vps2.2999: UDP, length 25 

Также был запущен параллельно

tcpdump -i tun dst 10.0.0.1
Но тут пакеты не прошли, получается, что PREROUTING не срабатывает?

People
() автор топика
Ответ на: комментарий от People

Правило с REJECT в FORWARD будет проблемой для udp-пакетов, которые вы хотите перенаправить.

Разрешите на втором сервере в FORWARD прохождение udp пакетов на 10.0.0.2:1999.

mky ★★★★★
()
Ответ на: комментарий от mky

Попробовал еще так

iptables -A FORWARD -i tun -p udp --dport 2999 -j ACCEPT

Тоже не помогло (

People
() автор топика
Ответ на: комментарий от People

Правило для пакетов в 10.0.0.2 нужно, но для всех, а не только для ESTABLISHED:

iptables -A FORWARD -d 10.0.0.0/24 -j ACCEPT

Если вам хочется такое правило:

iptables -A FORWARD -i tun -p udp --dport 2999 -j ACCEPT

то нужно писать -o tun, потому что пакет в порт 2999 уходит через интерфейс tun, а не приходит.

mky ★★★★★
()
Ответ на: комментарий от mky

Ввел то, что Вы написали:

[root@localhost ~]# iptables-save
# Generated by iptables-save v1.4.7 on Thu Jan  4 16:16:35 2018
*mangle
:PREROUTING ACCEPT [1152:74530]
:INPUT ACCEPT [1151:74477]
:FORWARD ACCEPT [1:53]
:OUTPUT ACCEPT [1265:500106]
:POSTROUTING ACCEPT [1265:500106]
-A OUTPUT -s 92.226.92.226/32 -p udp -j CONNMARK --restore-mark --nfmask 0xffffffff --ctmask 0xffffffff
COMMIT
# Completed on Thu Jan  4 16:16:35 2018
# Generated by iptables-save v1.4.7 on Thu Jan  4 16:16:35 2018
*nat
:PREROUTING ACCEPT [37:2024]
:POSTROUTING ACCEPT [63:4494]
:OUTPUT ACCEPT [63:4494]
-A PREROUTING -d 92.226.92.226/32 -p udp -m udp --dport 2999 -j DNAT --to-destination 10.0.0.2:1999
COMMIT
# Completed on Thu Jan  4 16:16:35 2018
# Generated by iptables-save v1.4.7 on Thu Jan  4 16:16:35 2018
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [1267:500586]
:f2b-sshd - [0:0]
-A INPUT -p gre -j ACCEPT
-A INPUT -p tcp -m multiport --dports 22 -j f2b-sshd
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m conntrack --ctstate NEW -m multiport --dports 20:22,80,443 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 2999 -j ACCEPT
-A INPUT -p udp -m state --state NEW -m udp --dport 2999 -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -d 10.0.0.0/24 -j ACCEPT
-A FORWARD -o tun -p udp -m udp --dport 2999 -j ACCEPT
-A f2b-sshd -j RETURN
-A f2b-sshd -j RETURN
COMMIT
# Completed on Thu Jan  4 16:16:35 2018

Теперь, когда пытаюсь проверить доступность с интернета, делаю на втором сервере tcpdump -i eth0 dst 92.226.92.226 and port 2999

[root@localhost ~]# tcpdump -i eth0 dst 92.226.92.226 and port 2999
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
16:21:34.177242 IP 198.58.115.119.47578 > vps2.2999: UDP, length 25
16:21:36.264514 IP 198.58.115.119.53283 > vps2.2999: UDP, length 25
16:21:39.351882 IP 198.58.115.119.38158 > vps2.2999: UDP, length 25
Параллельно запустил на втором сервере tcpdump -i tun dst 10.0.0.1

По прежнему ничего нет (

Он же должен через интерфейс tun отправить запрос на первый сервер или нет?

People
() автор топика
Ответ на: комментарий от People

У вас в FORWARD сначала стоит reject, последующие правила бесполезны. Сделайте так:

-A FORWARD -d 10.0.0.0/24 -j ACCEPT
-A FORWARD -s 10.0.0.0/24 -j ACCEPT
-A FORWARD -j REJECT --reject-with icmp-host-prohibited

mky ★★★★★
()
Ответ на: комментарий от mky

Сделал

[root@localhost ~]# iptables-save
# Generated by iptables-save v1.4.7 on Thu Jan  4 19:36:21 2018
*mangle
:PREROUTING ACCEPT [245:15018]
:INPUT ACCEPT [244:14965]
:FORWARD ACCEPT [1:53]
:OUTPUT ACCEPT [208:310907]
:POSTROUTING ACCEPT [208:310907]
-A OUTPUT -s 92.226.92.226/32 -p udp -j CONNMARK --restore-mark --nfmask 0xffffffff --ctmask 0xffffffff
COMMIT
# Completed on Thu Jan  4 19:36:21 2018
# Generated by iptables-save v1.4.7 on Thu Jan  4 19:36:21 2018
*nat
:PREROUTING ACCEPT [9:481]
:POSTROUTING ACCEPT [6:1797]
:OUTPUT ACCEPT [6:1797]
-A PREROUTING -d 92.226.92.226/32 -p udp -m udp --dport 2999 -j DNAT --to-destination 10.0.0.2:1999
COMMIT
# Completed on Thu Jan  4 19:36:21 2018
# Generated by iptables-save v1.4.7 on Thu Jan  4 19:36:21 2018
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [209:311251]
:f2b-sshd - [0:0]
-A INPUT -p gre -j ACCEPT
-A INPUT -p tcp -m multiport --dports 22 -j f2b-sshd
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m conntrack --ctstate NEW -m multiport --dports 20:22,80,443 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 2999 -j ACCEPT
-A INPUT -p udp -m state --state NEW -m udp --dport 2999 -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -d 10.0.0.0/24 -j ACCEPT
-A FORWARD -s 10.0.0.0/24 -j ACCEPT
-A FORWARD -o tun -p udp -m udp --dport 2999 -j ACCEPT
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
-A f2b-sshd -j RETURN
-A f2b-sshd -j RETURN
COMMIT
# Completed on Thu Jan  4 19:36:21 2018
До внешнего интерфейса запрос приходит пакет, а на внутренний не перенаправляет.

People
() автор топика
Ответ на: комментарий от mky

-A FORWARD -j REJECT --reject-with icmp-host-prohibited Удалил, не заметил.

People
() автор топика
Ответ на: комментарий от mky
[root@localhost ~]# iptables-save
# Generated by iptables-save v1.4.7 on Thu Jan  4 19:36:21 2018
*mangle
:PREROUTING ACCEPT [245:15018]
:INPUT ACCEPT [244:14965]
:FORWARD ACCEPT [1:53]
:OUTPUT ACCEPT [208:310907]
:POSTROUTING ACCEPT [208:310907]
-A OUTPUT -s 92.226.92.226/32 -p udp -j CONNMARK --restore-mark --nfmask 0xffffffff --ctmask 0xffffffff
COMMIT
# Completed on Thu Jan  4 19:36:21 2018
# Generated by iptables-save v1.4.7 on Thu Jan  4 19:36:21 2018
*nat
:PREROUTING ACCEPT [9:481]
:POSTROUTING ACCEPT [6:1797]
:OUTPUT ACCEPT [6:1797]
-A PREROUTING -d 92.226.92.226/32 -p udp -m udp --dport 2999 -j DNAT --to-destination 10.0.0.2:1999
COMMIT
# Completed on Thu Jan  4 19:36:21 2018
# Generated by iptables-save v1.4.7 on Thu Jan  4 19:36:21 2018
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [209:311251]
:f2b-sshd - [0:0]
-A INPUT -p gre -j ACCEPT
-A INPUT -p tcp -m multiport --dports 22 -j f2b-sshd
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m conntrack --ctstate NEW -m multiport --dports 20:22,80,443 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 2999 -j ACCEPT
-A INPUT -p udp -m state --state NEW -m udp --dport 2999 -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -d 10.0.0.0/24 -j ACCEPT
-A FORWARD -s 10.0.0.0/24 -j ACCEPT
-A FORWARD -o tun -p udp -m udp --dport 2999 -j ACCEPT
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
-A f2b-sshd -j RETURN
-A f2b-sshd -j RETURN
COMMIT
# Completed on Thu Jan  4 19:36:21 2018
People
() автор топика
Ответ на: комментарий от People

Если вы смотрите пакеты на tun-интерфейсе командой:

Параллельно запустил на втором сервере tcpdump -i tun dst 10.0.0.1

то у меня для вас плохие новости...

Попробуйте запустить и смотреть:

tcpdump -i tun -n -nn host 10.0.0.2 and udp

mky ★★★★★
()
Ответ на: комментарий от mky

Спасибо.

Вижу, что пакет приходит с eth0->tun на втором сервере. На первом сервере тоже вижу, что пакет пришел на tun. Тогда почему программа не может соединится с первым сервером? сервер программы запущен с IP 91.188.116.198:1999. Программу клиент запускаю с левой машины, прописываю IP 92.226.92.226:2999 и нажимаю connect в ответ тишина.

Вот iptables первой машины на данный момент

[root@localhost ~]# iptables-save
# Generated by iptables-save v1.4.21 on Thu Jan  4 22:46:03 2018
*mangle
:PREROUTING ACCEPT [32333642:2013895076]
:INPUT ACCEPT [32251964:2011135997]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [46840733:10120372568]
:POSTROUTING ACCEPT [46840733:10120372568]
-A OUTPUT -s 91.188.116.198/32 -p udp -j CONNMARK --restore-mark --nfmask 0xffffffff --ctmask 0xffffffff
COMMIT
# Completed on Thu Jan  4 22:46:03 2018
# Generated by iptables-save v1.4.21 on Thu Jan  4 22:46:03 2018
*nat
:PREROUTING ACCEPT [157541:6766150]
:INPUT ACCEPT [75107:3967901]
:OUTPUT ACCEPT [9910:602951]
:POSTROUTING ACCEPT [9910:602951]
-A PREROUTING -d 10.0.0.2/32 -p udp -m udp --dport 2999 -j CONNMARK --set-xmark 0x4/0xffffffff
-A PREROUTING -d 10.0.0.2/32 -p udp -m udp --dport 1999 -j DNAT --to-destination 91.188.116.198:1999
COMMIT
# Completed on Thu Jan  4 22:46:03 2018
# Generated by iptables-save v1.4.21 on Thu Jan  4 22:46:03 2018
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [46840737:10120373300]
:f2b-sshd - [0:0]
-A INPUT -p gre -j ACCEPT
-A INPUT -p tcp -m multiport --dports 22 -j f2b-sshd
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m conntrack --ctstate NEW -m multiport --dports 20:22,80,443 -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 1999 -j ACCEPT
-A INPUT -p udp -m state --state NEW -m udp --dport 1999 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
-A f2b-sshd -j RETURN
-A f2b-sshd -j RETURN
COMMIT
# Completed on Thu Jan  4 22:46:03 2018

People
() автор топика
Ответ на: комментарий от People

-A PREROUTING -d 10.0.0.2/32 -p udp -m udp --dport 2999 -j CONNMARK --set-xmark 0x4/0xffffffff

Здесь порт должен быть 1999. Хотя правильнее было бы заменить это правило на такое:

-A PREROUTING -i tun -j CONNMARK --set-xmark 0x4/0xffffffff

mky ★★★★★
()
Ответ на: комментарий от mky

Заменил на Ваш. Соединение доходит до tun первого сервера. Но программа не соединяется.

People
() автор топика
Ответ на: комментарий от mky

на ens33 интерфейсе ничего

[root@localhost ~]# tcpdump -i ens33 -n -nn host 91.188.116.198 and udp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens33, link-type EN10MB (Ethernet), capture size 262144 bytes

People
() автор топика
Ответ на: комментарий от mky

Может быть дело в ppp? Прошу прощения, на ens33 вроде трафик не должен идти, если соединение поднято ppp и белый ip выдан им же, также программа сервер запущена с этим IP то трафик по идее должен поступать с tun на ppp?

People
() автор топика
Ответ на: комментарий от People

На вирт. сервере тарфик лучше пытаться ловить по порту (1999), по 91.188.116.198 смотреть нечего, если адрес у входящих пакетов был изменён с помощью DNAT, то у исходящих он будет изменён обратно (без явных правил в iptables).

tcpdump -i ens33 -n -nn port 1999 and udp

И такое же правило для ″-i ppp0″.

Если там будут пакеты (от адреса 10.0.0.2), значит у вас не срабатывает маршрутизация — либо нет ″ip rule fwmark 4...″, либо не срабатывает маркировка пакетов (правила с ″-j CONNMARK).

mky ★★★★★
()
Ответ на: комментарий от mky

tcpdump -i ens33 -n -nn port 1999 and udp

Ничего

tcpdump -i ppp0 -n -nn port 1999 and udp

Куча соединений сыпется и не понятно как ловить, но я посмотрел на момент коннекта программы к вирт.серверу и не обнаружил ip 10.0.0.2.

В скрипте указано маркировка

/sbin/ip route add 10.0.0.0/24 dev tun src 10.0.0.2 table table4
/sbin/ip route add table table4 default via 10.0.0.1 dev tun
/sbin/ip rule add from 10.0.0.2 table table4
/sbin/ip rule add fwmark 4 table table4
iptables -t nat -A PREROUTING -i tun -j CONNMARK --set-xmark 4
iptables -t nat -A PREROUTING -d 10.0.0.2 -p udp -m udp --dport 1999 -j DNAT --to-destination 91.188.116.198:1999
iptables -t mangle -A OUTPUT -s 91.188.116.198 -p udp -j CONNMARK --restore-mark
В /etc/iproute2 прописывается
#
# reserved values
#
255	local
254	main
253	default
0	unspec
#
# local
#
#1	inr.ruhep
130 table4
В чем еще может быть проблема?

People
() автор топика
Ответ на: комментарий от People

Если много разных других соединений, добавьте к tcpdump указание на адрес, с которого проверяете ( ″and host 198.58.115.119″ ).

Отключите rp_filter для tun:

echo 0 > /proc/sys/net/ipv4/conf/tun/rp_filter

Посмотрите вывод ″iptables-save -c″, там для каждого правила будет показан счётчик, посмотрите, что у ″-j CONNMARK″ счётчики не нулевые.

Ну и проверьте, что в выводе команд ″ip rule″, ″ip route show table table4″ всё как должно быть, а то может в скрипте опечатка или ещё что.

mky ★★★★★
()
Ответ на: комментарий от mky

Перезапустил iptables, запустил скрипт, попробовал 2 раза приконектится.

iptables-save -c

[root@localhost ~]# iptables-save -c
[181900:28419722] -A OUTPUT -s 91.188.116.198/32 -p udp -j CONNMARK --restore-mark --nfmask 0xffffffff --ctmask 0xffffffff
[2:106] -A PREROUTING -i tun -j CONNMARK --set-xmark 0x4/0xffffffff
[2:106] -A PREROUTING -d 10.0.0.2/32 -p udp -m udp --dport 1999 -j DNAT --to-destination 91.188.116.198:1999

Счетчики изначально были по 0, когда я 2 раза попробовал, счетчики обновились до 2. Не знаю, нормально ли это?

rp_filter отключил и добавил в скрипт.

ip rule

[root@localhost ~]# ip rule
0:      from all lookup local
32744:  from all fwmark 0x4 lookup table4
32745:  from 10.0.0.2 lookup table4
32746:  from all fwmark 0x4 lookup table4
32747:  from 10.0.0.2 lookup table4
32748:  from all fwmark 0x4 lookup table4
32749:  from 10.0.0.2 lookup table4
32750:  from all fwmark 0x4 lookup table4
32751:  from 10.0.0.2 lookup table4
32752:  from all fwmark 0x4 lookup table4
32753:  from 10.0.0.2 lookup table4
32754:  from all fwmark 0x4 lookup table4
32755:  from 10.0.0.2 lookup table4
32756:  from all fwmark 0x4 lookup table4
32757:  from 10.0.0.2 lookup table4
32758:  from all fwmark 0x4 lookup table4
32759:  from 10.0.0.2 lookup table4
32760:  from all fwmark 0x4 lookup table4
32761:  from 10.0.0.2 lookup table4
32762:  from all fwmark 0x4 lookup table4
32763:  from 10.0.0.2 lookup table4
32764:  from all fwmark 0x4 lookup table4
32765:  from 10.0.0.2 lookup table4
32766:  from all lookup main
32767:  from all lookup default
ip route show table table4
[root@localhost ~]# ip route show table table4
default via 10.0.0.1 dev tun
10.0.0.0/24 dev tun scope link src 10.0.0.2
Да вроде бы нет опечаток, вот сам скрипт
#!/bin/sh
/sbin/iptunnel del tun
/sbin/iptunnel add tun mode gre remote 92.226.92.226 local 91.188.116.198 ttl 225
/sbin/ifconfig tun 10.0.0.2/24
/sbin/ifconfig tun up
/sbin/ifconfig tun pointopoint 10.0.0.1
/sbin/ifconfig tun multicast
/sbin/ip route add 10.0.0.0/24 dev tun src 10.0.0.2 table table4
/sbin/ip route add table table4 default via 10.0.0.1 dev tun
/sbin/ip rule add from 10.0.0.2 table table4
/sbin/ip rule add fwmark 4 table table4
sysctl -w net.ipv4.ip_forward=1
iptables -t nat -A PREROUTING -i tun -j CONNMARK --set-xmark 4
iptables -t nat -A PREROUTING -d 10.0.0.2 -p udp -m udp --dport 1999 -j DNAT --to-destination 91.188.116.198:1999
iptables -t mangle -A OUTPUT -s 91.188.116.198 -p udp -j CONNMARK --restore-mark
iptables -I INPUT -p GRE -j ACCEPT
echo 0 > /proc/sys/net/ipv4/conf/tun/rp_filter

People
() автор топика
Ответ на: комментарий от People

Со счётчиками нормально. В таблицу nat попадает только первый пакет соединения, две попытки — два пакета.

Попробуйте ещё

echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter

mky ★★★★★
()
Ответ на: комментарий от People

Нет, у вас нет обмена пакетами между tun и ppp. Не важно на каком интерфейсе ip-адрес, они все считаются локальными. Все пакеты идущие на локальный адрес не ходят по цепочкам FORWARD.

Попробуйте явно прописать правило для того ip-адреса, с которого проверяете, в начало цепочки:

iptables -I INPUT -s 198.58.115.119 -d 91.188.116.198 -p udp --dport 1999 -j ACCEPT

Потом посмотрите по счётчикам, срабатывает ли это правило при попытках установить соединение. Если счётчик будет не нулевой, значит правило срабатывает и нужно разбираться, возникают ли ответные пакеты смотря на счётчики правила:

iptables -I OUTPUT -d 198.58.115.119 -s 91.188.116.198 -p udp --sport 1999 -j ACCEPT

mky ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.