LINUX.ORG.RU
ФорумAdmin

IPTABLES проброс портов через VPN

 ,


0

1

Приветствую! Помогите разобраться и решить вопрос. IPTABLES читать умею, писать еще не могу. Имеется VPS'ка, на ней развернул OpenVPN сервер. К нему подключаюсь с другого «сервер 2»(на данный момент с виртуалки) по впн. На «сервер 2» стоит apache2. У VPS есть выделенный ip eth1, и нужно что бы обращаясь к VPS по 80 порту, открывался сайт с «сервер 2», который подключен по впн tun0 у которого адрес 10.8.0.6. Перепробовал различные мануалы, не работает.

~# ip address
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 52:54:00:60:25:89 brd ff:ff:ff:ff:ff:ff
    inet 10.100.19.45/16 brd 10.100.255.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::5054:ff:fe60:2589/64 scope link
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 52:54:00:be:bd:f4 brd ff:ff:ff:ff:ff:ff
    inet 81.177.*.*/24 brd 81.177.*.255 scope global eth1
       valid_lft forever preferred_lft forever
    inet6 fe80::5054:ff:febe:bdf4/64 scope link
       valid_lft forever preferred_lft forever
4: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 100
    link/none
    inet 10.8.0.1 peer 10.8.0.2/32 scope global tun0
       valid_lft forever preferred_lft forever
    inet6 fe80::1685:a204:e4dc:546b/64 scope link flags 800
       valid_lft forever preferred_lft forever

Перепробовал различные мануалы, не работает.

Может для начала покажите что пробовали?

anc ★★★★★
()
Ответ на: комментарий от anc
iptables -t nat -A PREROUTING -i eth1 -p tcp -m tcp --dport 80 -j DNAT --to-destination 10.8.0.6
iptables -A FORWARD -i eth1 -p tcp --dport 80 -j ACCEPT

форвард пакетов в sysctl.conf включен

wget 10.8.0.6/index.html дает скачать

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

А у «сервер 2» шлюз по умолчанию через ovpn или остается через локального прова? Если второе то нужен еще snat iptables -t nat -A POSTROUTING -p tcp -d 10.8.0.6 --dport 80 -j MASQUERADE

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

Сделал - шлюз по умолчанию остается через локального прова, до этого было через ovpn, после перезагрузки «сервера 1» правила iptables слетели и снова настраивать надо, в общем второй вариант сейчас, добавил ваше правило - все равно не роббит. В таком состоянии сейчас iptables

iptables-save
# Generated by iptables-save v1.6.0 on Wed Mar  6 18:49:08 2019
*filter
:INPUT ACCEPT [682:89551]
:FORWARD ACCEPT [64:3328]
:OUTPUT ACCEPT [465:51708]
-A FORWARD -i eth1 -p tcp -m tcp --dport 80 -j ACCEPT
COMMIT
# Completed on Wed Mar  6 18:49:08 2019
# Generated by iptables-save v1.6.0 on Wed Mar  6 18:49:08 2019
*nat
:PREROUTING ACCEPT [80:13665]
:INPUT ACCEPT [16:2065]
:OUTPUT ACCEPT [19:1444]
:POSTROUTING ACCEPT [19:1444]
-A PREROUTING -i eth1 -p tcp -m tcp --dport 80 -j DNAT --to-destination 10.8.0.6
-A POSTROUTING -d 10.8.0.6/32 -p tcp -m tcp --dport 80 -j MASQUERADE
COMMIT
# Completed on Wed Mar  6 18:49:08 2019

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

1. Проверяете точно соединяясь из интернета?
2. И на всякий случай покажите все-таки
cat /proc/sys/net/ipv4/ip_forward

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

Спасибо за решение, думаю оно решит задачу, но хотелось бы поменьше софта на сервере и стандартными средствами. Если так и не удастся, буду с nginx разбираться.

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

1. Не совсем понял. На самом «сервер2» где апач по 127.0.0.1 страница открывается. На «сервер1» по vpn wget 10.8.0.6:80/index.html скачивается, сайт открыть не могу т.к. нет окружения и только ssh. С обычного компьютера в браузере набираю ip сервера1 ошибка - Время ожидания соединения истекло. 2. cat /proc/sys/net/ipv4/ip_forward выдает 1. Если интересно, можете посмотреть сами, сервер тестовый, могу дать вам доступ.

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

А посмотрите при попытке обратиться tcpdump на:
VPS

tcpdump -n -i eth1 port 80 
tcpdump -n -i tun0 port 80

«сервер 2»
tcpdump -n -i tunN port 80 
где tunN имя интерфейса у ovpn

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

Интересно, движения какие-то есть везде, только я не понимаю о чем они)
Не много подрезал логи, т.к. слишком большое сообщение не лезло, но сильно не стал подрезать, что бы важное вдруг не потерялось. Логи писал при попытке открыть сайт.
Движения по интерфейсу который смотрит в интернет:

tcpdump -n -i eth1 port 80
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture size 262144 bytes
21:14:56.608067 IP 185.128.my.ip.56235 > 81.177.vps.ip.80: Flags [S], seq 2080868478, win 64240, options [mss 1325,nop,wscale 8,nop,nop,sackOK], length 0
21:14:56.854326 IP 185.128.my.ip.56236 > 81.177.vps.ip.80: Flags [S], seq 3244870371, win 64240, options [mss 1325,nop,wscale 8,nop,nop,sackOK], length 0
21:14:59.608928 IP 185.128.my.ip.56235 > 81.177.vps.ip.80: Flags [S], seq 2080868478, win 64240, options [mss 1325,nop,wscale 8,nop,nop,sackOK], length 0
21:14:59.854917 IP 185.128.my.ip.56236 > 81.177.vps.ip.80: Flags [S], seq 3244870371, win 64240, options [mss 1325,nop,wscale 8,nop,nop,sackOK], length 0
21:15:05.109453 IP 10.100.18.213.60844 > 10.100.13.24.80: Flags [S], seq 2236345477, win 29200, options [mss 1460,sackOK,TS val 2455518486 ecr 0,nop,wscale 7], length 0
21:15:05.605271 IP 185.128.my.ip.56235 > 81.177.vps.ip.80: Flags [S], seq 2080868478, win 64240, options [mss 1325,nop,wscale 8,nop,nop,sackOK], length 0
21:15:05.856293 IP 185.128.my.ip.56236 > 81.177.vps.ip.80: Flags [S], seq 3244870371, win 64240, options [mss 1325,nop,wscale 8,nop,nop,sackOK], length 0
^C
7 packets captured
7 packets received by filter
0 packets dropped by kernel
Движения по vpn интерфейсу:
tcpdump -n -i tun0 port 80
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on tun0, link-type RAW (Raw IP), capture size 262144 bytes
21:19:30.874699 IP 10.8.0.1.56335 > 10.8.0.6.80: Flags [S], seq 577612442, win 64240, options [mss 1325,nop,wscale 8,nop,nop,sackOK], length 0
21:19:31.094253 IP 10.8.0.1.56336 > 10.8.0.6.80: Flags [S], seq 527935025, win 64240, options [mss 1325,nop,wscale 8,nop,nop,sackOK], length 0
21:19:31.276036 IP 10.8.0.6.80 > 10.8.0.1.56335: Flags [S.], seq 1074244749, ack 577612443, win 29200, options [mss 1355,nop,nop,sackOK,nop,wscale 7], length 0
21:19:31.456442 IP 10.8.0.6.80 > 10.8.0.1.56336: Flags [S.], seq 3087707979, ack 527935026, win 29200, options [mss 1355,nop,nop,sackOK,nop,wscale 7], length 0
21:20:08.765616 IP 10.8.0.6.80 > 10.8.0.1.56335: Flags [S.], seq 1074244749, ack 577612443, win 29200, options [mss 1355,nop,nop,sackOK,nop,wscale 7], length 0
21:20:08.937248 IP 10.8.0.6.80 > 10.8.0.1.56336: Flags [S.], seq 3087707979, ack 527935026, win 29200, options [mss 1355,nop,nop,sackOK,nop,wscale 7], length 0
^C
22 packets captured
22 packets received by filter
0 packets dropped by kernel
На «сервере2»:
tcpdump -n -i tun0 port 80
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on tun0, link-type RAW (Raw IP), capture size 262144 bytes
00:23:29.706837 IP 10.8.0.1.56440 > 10.8.0.6.80: Flags [S], seq 1227608503, win 64240, options [mss 1325,nop,wscale 8,nop,nop,sackOK], length 0
00:23:29.706855 IP 10.8.0.6.80 > 10.8.0.1.56440: Flags [S.], seq 854817025, ack 1227608504, win 29200, options [mss 1460,nop,nop,sackOK,nop,wscale 7], length 0
00:23:29.863809 IP 10.8.0.1.56441 > 10.8.0.6.80: Flags [S], seq 2001187421, win 64240, options [mss 1325,nop,wscale 8,nop,nop,sackOK], length 0
00:23:29.863826 IP 10.8.0.6.80 > 10.8.0.1.56441: Flags [S.], seq 1206417386, ack 2001187422, win 29200, options [mss 1460,nop,nop,sackOK,nop,wscale 7], length 0
00:23:46.958780 IP 10.8.0.6.80 > 10.8.0.1.56441: Flags [S.], seq 1206417386, ack 2001187422, win 29200, options [mss 1460,nop,nop,sackOK,nop,wscale 7], length 0
00:23:51.055298 IP 10.8.0.6.80 > 10.8.0.1.56440: Flags [S.], seq 854817025, ack 1227608504, win 29200, options [mss 1460,nop,nop,sackOK,nop,wscale 7], length 0
00:24:03.086276 IP 10.8.0.6.80 > 10.8.0.1.56441: Flags [S.], seq 1206417386, ack 2001187422, win 29200, options [mss 1460,nop,nop,sackOK,nop,wscale 7], length 0
00:24:07.183340 IP 10.8.0.6.80 > 10.8.0.1.56440: Flags [S.], seq 854817025, ack 1227608504, win 29200, options [mss 1460,nop,nop,sackOK,nop,wscale 7], length 0
^C
22 packets captured
22 packets received by filter
0 packets dropped by kernel

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

У вас они от разного времени. Покажите когда запущены одновременно, т.е. запускаем три tcpdump одновременно, и покажите их выхлоп.

Вместо браузера лучше телнетом, меньше пролетит
telnet 185.128.my.ip 80
и если соединиться по потом
GET /index.html и enter

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

На eth1 почистил лишние логи, т.к. кто-то беспрестанно стучит на этот интерфейс засоряя эфир. Оставил только то что я стучал с telnet
«Сервер1» интерфей смотрящий наружу 81.177.*.*:

tcpdump -n -i eth1 port 80
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture size 262144 bytes
18:25:00.548415 IP 185.128.я.я.53566 > 81.177.*.*.80: Flags [S], seq 312992164, win 64240, options [mss 1325,nop,wscale 8,nop,nop,sackOK], length 0
18:25:03.548204 IP 185.128.я.я.53566 > 81.177.*.*.80: Flags [S], seq 312992164, win 64240, options [mss 1325,nop,wscale 8,nop,nop,sackOK], length 0
18:25:09.547862 IP 185.128.я.я.53566 > 81.177.*.*.80: Flags [S], seq 312992164, win 64240, options [mss 1325,nop,wscale 8,nop,nop,sackOK], length 0
^C
49 packets captured
49 packets received by filter
0 packets dropped by kernel

«Сервер1» vpn-сервер 10.8.0.1:

tcpdump -n -i tun0 port 80
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on tun0, link-type RAW (Raw IP), capture size 262144 bytes
18:25:00.548601 IP 10.8.0.1.53566 > 10.8.0.6.80: Flags [S], seq 312992164, win 64240, options [mss 1325,nop,wscale 8,nop,nop,sackOK], length 0
18:25:00.953087 IP 10.8.0.6.80 > 10.8.0.1.53566: Flags [S.], seq 224651522, ack 312992165, win 29200, options [mss 1355,nop,nop,sackOK,nop,wscale 7], length 0
18:25:01.964110 IP 10.8.0.6.80 > 10.8.0.1.53566: Flags [S.], seq 224651522, ack 312992165, win 29200, options [mss 1355,nop,nop,sackOK,nop,wscale 7], length 0
18:25:03.548276 IP 10.8.0.1.53566 > 10.8.0.6.80: Flags [S], seq 312992164, win 64240, options [mss 1325,nop,wscale 8,nop,nop,sackOK], length 0
18:25:03.983870 IP 10.8.0.6.80 > 10.8.0.1.53566: Flags [S.], seq 224651522, ack 312992165, win 29200, options [mss 1355,nop,nop,sackOK,nop,wscale 7], length 0
18:25:06.019163 IP 10.8.0.6.80 > 10.8.0.1.53566: Flags [S.], seq 224651522, ack 312992165, win 29200, options [mss 1355,nop,nop,sackOK,nop,wscale 7], length 0
18:25:09.547931 IP 10.8.0.1.53566 > 10.8.0.6.80: Flags [S], seq 312992164, win 64240, options [mss 1325,nop,wscale 8,nop,nop,sackOK], length 0
18:25:09.969654 IP 10.8.0.6.80 > 10.8.0.1.53566: Flags [S.], seq 224651522, ack 312992165, win 29200, options [mss 1355,nop,nop,sackOK,nop,wscale 7], length 0
18:25:14.203486 IP 10.8.0.6.80 > 10.8.0.1.53566: Flags [S.], seq 224651522, ack 312992165, win 29200, options [mss 1355,nop,nop,sackOK,nop,wscale 7], length 0
18:25:22.294183 IP 10.8.0.6.80 > 10.8.0.1.53566: Flags [S.], seq 224651522, ack 312992165, win 29200, options [mss 1355,nop,nop,sackOK,nop,wscale 7], length 0
^C
10 packets captured
10 packets received by filter
0 packets dropped by kernel

«Сервер2» Веб-сайт vpn-клиент 10.8.0.6:

tcpdump -n -i tun0 port 80
[sudo] пароль для sa:
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on tun0, link-type RAW (Raw IP), capture size 262144 bytes
21:23:08.590305 IP 10.8.0.1.53566 > 10.8.0.6.80: Flags [S], seq 312992164, win 64240, options [mss 1325,nop,wscale 8,nop,nop,sackOK], length 0
21:23:08.590322 IP 10.8.0.6.80 > 10.8.0.1.53566: Flags [S.], seq 224651522, ack 312992165, win 29200, options [mss 1460,nop,nop,sackOK,nop,wscale 7], length 0
21:23:09.607567 IP 10.8.0.6.80 > 10.8.0.1.53566: Flags [S.], seq 224651522, ack 312992165, win 29200, options [mss 1460,nop,nop,sackOK,nop,wscale 7], length 0
21:23:11.591728 IP 10.8.0.1.53566 > 10.8.0.6.80: Flags [S], seq 312992164, win 64240, options [mss 1325,nop,wscale 8,nop,nop,sackOK], length 0
21:23:11.591741 IP 10.8.0.6.80 > 10.8.0.1.53566: Flags [S.], seq 224651522, ack 312992165, win 29200, options [mss 1460,nop,nop,sackOK,nop,wscale 7], length 0
21:23:13.607522 IP 10.8.0.6.80 > 10.8.0.1.53566: Flags [S.], seq 224651522, ack 312992165, win 29200, options [mss 1460,nop,nop,sackOK,nop,wscale 7], length 0
21:23:17.602619 IP 10.8.0.1.53566 > 10.8.0.6.80: Flags [S], seq 312992164, win 64240, options [mss 1325,nop,wscale 8,nop,nop,sackOK], length 0
21:23:17.602633 IP 10.8.0.6.80 > 10.8.0.1.53566: Flags [S.], seq 224651522, ack 312992165, win 29200, options [mss 1460,nop,nop,sackOK,nop,wscale 7], length 0
21:23:21.735996 IP 10.8.0.6.80 > 10.8.0.1.53566: Flags [S.], seq 224651522, ack 312992165, win 29200, options [mss 1460,nop,nop,sackOK,nop,wscale 7], length 0
21:23:29.928085 IP 10.8.0.6.80 > 10.8.0.1.53566: Flags [S.], seq 224651522, ack 312992165, win 29200, options [mss 1460,nop,nop,sackOK,nop,wscale 7], length 0
^C
10 packets captured
10 packets received by filter
0 packets dropped by kernel

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

Смотрю у вас есть еще eth0 а случайно defgw не через него ли идет? Покажите ip r s
Общий смысл в том, что ответ от 10.8.0.6 сервер получает 21:23:08.590322 IP 10.8.0.6.80 > 10.8.0.1.53566: Flags [S.], seq 224651522, ack 312992165, win 29200, options [mss 1460,nop,nop,sackOK,nop,wscale 7], length 0
но он не уходит через eth1

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

Все верно, было два defgw eth0 который установился по умолчанию на VPS, и при подключении статического ip подключился еще eth1 и там тоже был defgw. Удалил delete default gw 10.100.20.230 eth0 и заработало! Страница апач открывается по внешнему ip vps. Премного благодарен!

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

fyi, есть один нюанс в решении с маскарадом, все запросы на апач будут прилетать от адреса 10.8.0.1.

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

Получается со стороны «сервера2» не видно кто и откуда пришел на самом деле? А какой альтернативный способ еще есть?

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

Получается со стороны «сервера2» не видно кто и откуда пришел на самом деле?

Ага, я на это и намекнул, это потому что у вас ovpn не defgw для «сервер2». Если был бы defgw то правило с маскарадом не нужно.

А какой альтернативный способ еще есть?

Использовать pbr.

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

Теперь появилась еще одна проблема) не работает интернет на «сервер2», после того как туда поставили defgw ovpn. До этого, что бы работал интернет через opvn я устанавливал правила на «сервере1»:

iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -s 10.8.0.0/24 -j ACCEPT
iptables -A FORWARD -j REJECT
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE //с eth1 не работает

Сейчас же в купе с новыми правила для сайта не работает, видимо как-то конфликтуют. Можете еще посмотреть в чем проблема?

iptables -t nat -A PREROUTING -i eth1 -p tcp -m tcp --dport 80 -j DNAT --to-destination 10.8.0.6
iptables -A FORWARD -i eth1 -p tcp --dport 80 -j ACCEPT

Если первыми ставлю правила для «сайта», то сайт работает, но интернет на сервере2 не работает. Если первыми ставлю правила для интернета на сервере2, то сайт не работает.

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

Давайте без путаницы с интерфейсами, предполагаем что defgw это eth1. Вот этих правил достаточно для nat

iptables -t nat -A PREROUTING -i eth1 -p tcp -m tcp --dport 80 -j DNAT --to-destination 10.8.0.6
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth1 -j MASQUERADE
А в filter у вас и так все в ACCEPT, но это отдельный вопрос. Конечно это не есть гуд, как минимум в части цепочки INPUT.

Если вас интересуют разрешающие правила для FORWARD, то у вас в целом все верно, это для выхода в инет «сервер2»:
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -s 10.8.0.0/24 -j ACCEPT
это для отправки пакетов на апач «сервер2»:
iptables -A FORWARD -i eth1 -p tcp --dport 80 -j ACCEPT
его можно только чуть «пожестче» сделать
iptables -A FORWARD -i eth1 -o tun0 -d 10.8.0.6 -p tcp --dport 80 -j ACCEPT
но это уже вкуснотеево.

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

Отлично, все заработало! Большое спасибо вам, вы мастер своего дела!)

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