LINUX.ORG.RU

Помогите разобраться с reverse proxy

 


0

1

На днях решил открыть свою медиатеку(plex media server) наружу и узнал, что мой редиска провайдер дает возможность открыть порт наружу только при покупке белого ip.

Платить за белый ip 300р в месяц меня душит жаба, т.к. за половину от этого можно у яндекса взять терабайт.

Нагуглил, что есть такая штука как reverse proxy. Также у меня есть VPS. Но вот понять как это всё настроить, у меня не получается даже статьям по картинками.

Объясните, пожалуйста, на пальцах, как для дебила, где и что я должен установить и настроить, чтобы у меня появился доступ наружу(в будущем хочу ещё NextCloud поднять тоже) без возможности проброса портов у провайдера. Что ставить на сервере, что ставить на VPS? Как потом это всё прописывать, чтобы работало 24\7, без ручного запуска чего бы то ни было. И при этом чтобы это не VPN был, чтобы интернеты работали как и раньше, напрямую, а через VPS только проксируемые порты шли.

★★★★★

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

мне правда неловко, но я еще раз попрошу - обрати внимание на мое сообщение, где я говорил про очисти файервол, мать твою, от васянства с днатом нах. (простите)

и покажи tcpdump.

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

iptables -t nat -I PREROUTING -p tcp -d VPS-IP/24 –dport 32400 -j DNAT –to-destination 127.0.0.1:32400

Это не нужно. Честно-честно. вот прям совсем - совсем не нужно. нужно явно указать адрес, который слушать. и (желательно) понять, что вообще делает ssh -R

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

мать твою, от васянства с днатом нах. (простите)

Да как его очистить? ребутом? Сделал.

и покажи tcpdump.

Там мегабайты говна летят. Или повесить его на порт нужный tcpdump port 32400?

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

Перезагрузил VPS, учитывая что теперь не работает, васянство очистилось.

13:02:47.842863 IP 5.188.167.246.60830 > loki13gm.example.com.32400: Flags [S], seq 3898144139, win 64240, options [mss 1460,sackOK,TS val 878195178 ecr 0,nop,wscale 7], length 0
13:02:47.842902 IP loki13gm.example.com.32400 > 5.188.167.246.60830: Flags [R.], seq 0, ack 3898144140, win 0, length 0

Вот что tcpdump port 32400 дает при попытке подключится с помощью curl vps-ip 32400

Loki13 ★★★★★
() автор топика
Последнее исправление: Loki13 (всего исправлений: 2)
Ответ на: комментарий от firkax
alexv@home ~ [255]> ssh -R VPS-IP:32400:localhost:32400 root@VPS-IP -p 50222
Welcome to Ubuntu 22.04.4 LTS (GNU/Linux 5.15.0-116-generic x86_64)

root@loki13gm:~# netstat -nltp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 127.0.0.1:32400         0.0.0.0:*               LISTEN      1279/sshd: root@pts 
tcp        0      0 127.0.0.1:17845         0.0.0.0:*               LISTEN      597/containerd      
tcp        0      0 127.0.0.1:8118          0.0.0.0:*               LISTEN      596/privoxy         
tcp        0      0 0.0.0.0:50222           0.0.0.0:*               LISTEN      607/sshd: /usr/sbin 
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      268/systemd-resolve 
tcp        0      0 0.0.0.0:143             0.0.0.0:*               LISTEN      587/ssserver        
tcp        0      0 0.0.0.0:8081            0.0.0.0:*               LISTEN      585/ssserver        
tcp        0      0 VPS-IP:1080             0.0.0.0:*               LISTEN      1245/danted         
tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      959/docker-proxy    
tcp6       0      0 :::50222                :::*                    LISTEN      607/sshd: /usr/sbin 
tcp6       0      0 ::1:8118                :::*                    LISTEN      596/privoxy         
tcp6       0      0 ::1:32400               :::*                    LISTEN      1279/sshd: root@pts 
tcp6       0      0 fe80::5054:ff:fe71:1080 :::*                    LISTEN      1245/danted         
tcp6       0      0 :::443                  :::*                    LISTEN      966/docker-proxy    
root@loki13gm:~# 

Всё это с чистыми правилами и без «васянских» настроек, после ребута.

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

В -R указан правильный айпи но он всё равно 127.0.0.1 слушает? Видимо настройки безопасности если так. В sshd_config PermitOpen/PermitListen есть?

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

В sshd_config PermitOpen есть?

Нет, такого параметра нет. Даже в закомментированных «подсказках» такого нет.

PermitListen

И такого тоже нет.

может вот в этом дело? У меня он по дефолту, в 'no' выставлен.

GatewayPorts no This prevents connecting to forwarded ports from outside the server computer.

GatewayPorts yes This allows anyone to connect to the forwarded ports. If the server is on the public Internet, anyone on the Internet can connect to the port.

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

Наверно оно, проверь.

А чем вообще плох способ с iptables dnat и почему он васянский? А то пишете, что васянский, а почему никто не сказал. В куче мануалов именно так и советуют делать.

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

Потому что настройка Gateway влияет на всего 1 аргумент сисколла, который сделает sshd. А ты вместо этого простого действия нат поднимаешь - это сложно и может потом ещё где-то вылезти боком.

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

ничем не плох, но это лютое усложнение для такой задачи. тебе нужен любой туннель, который можно установить от твоей машины до впс. можешь поставить wireguard/openvpn, тогда будет чуть сложнее, но стабильнее. можешь просто по ssh выбрасывать порт своей машины через впс.

команда ssh -R выше вроде правильная, но лучше явно указывай адрес, чтоб машина сама не додумывала какой интерфейс ты имеешь в виду.

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

С GatewayPorts=yes работает, но команда(или добавление в /etc/sysctl.conf)

sysctl -w net.ipv4.conf.ens3.route_localnet=1

всё равно нужна.

Ну и sshd с GatewayPorts=yes сам добавляет правило в таблицу PREROUTING

Chain PREROUTING (policy ACCEPT)
num  target     prot opt source               destination         
1    DNAT       tcp  --  anywhere             subnet.firstbyte.ru/24  tcp dpt:32400 to:127.0.0.1:32400

Разница только, что мне теперь не надо это правило вручную добавлять(на самом деле делать restore).

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

Что-то я очень сомневаюсь что он сам добавил правило (родная ОС для sshd вовсе не линукс а опенбсд, iptables там вообще нет). Сделай -R на другой порт для проверки - думаю там ничего не появится. Скорее всего правило как-то осталось от того что ты делал. Должен быть правильный адрес в netstat -nltp вместо 127.0.0.1, который работает безо всяких фокусов с файрволлом.

firkax ★★★★★
()