LINUX.ORG.RU
решено ФорумAdmin

Интернет шлюз на Debian. Маршрут для клиентов через VPN.

 , , ,


0

1

Всем привет. Нужна помощь с настройкой домашнего интернет шлюза начинающему юзеру. Есть системник с Debian с 2 сетевыми картами: enp3s0(192.168.1.0/24) в локалку, enp2s0 к провайдеру. Доступ в интернет через enp2s0->pppoe соединение. При поднятии на шлюзе VPN коннекта(strongswan, созданный средствами NetworkManager) шлюз выходит в интернет через VPN(show my ip показывает ip VPN), а все клиенты через канал провайдера (show my ip показывает ip провайдера). Помогите с добавлением необходимого маршрута, что бы все клиенты то же выходили в интернет через VPN.
iptables:

iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.1.0/24 -j MASQUERADE

ip route list (вручную ничего не добавлено):

default via X.X.0.1 dev ppp0 proto static metric 101
10.10.10.3 dev ppp0 proto kernel scope link src 10.10.10.3 metric 50
10.10.10.3 dev ppp0 proto kernel scope link src 10.10.10.3 metric 102
X.X.0.1 dev ppp0 proto kernel scope link src X.X.118.100
X.X.0.1 dev ppp0 proto kernel scope link src X.X.118.100 metric 102
192.168.1.0/24 dev enp3s0 proto kernel scope link src 192.168.1.2 metric 100

!!!!!!!!!!!!!!!!!!! True решения не нашел, поэтому очередной КОСТЫЛЬ

Подключаемся к VPN, через скрипт находим ip vpn и формируем правило iptable … SNAT.

Впервын создаю тему, извеняйте за оформление правила iptables: ''' iptables -P INPUT DROP

iptables -P OUTPUT DROP

iptables -P FORWARD DROP

iptables -A INPUT -i lo -j ACCEPT

iptables -A INPUT -i enp3s0 -j ACCEPT

iptables -A OUTPUT -o lo -j ACCEPT

iptables -A OUTPUT -o enp3s0 -j ACCEPT

iptables -A INPUT -p icmp –icmp-type echo-reply -j ACCEPT

iptables -A INPUT -p icmp –icmp-type destination-unreachable -j ACCEPT

iptables -A INPUT -p icmp –icmp-type time-exceeded -j ACCEPT

iptables -A INPUT -p icmp –icmp-type echo-request -j ACCEPT

iptables -A OUTPUT -o ppp0 -j ACCEPT

iptables -A INPUT -p all -m state –state ESTABLISHED,RELATED -j ACCEPT

iptables -A OUTPUT -p all -m state –state ESTABLISHED,RELATED -j ACCEPT

iptables -A FORWARD -p all -m state –state ESTABLISHED,RELATED -j ACCEPT

iptables -A INPUT -m state –state INVALID -j DROP

iptables -A FORWARD -m state –state INVALID -j DROP

iptables -A INPUT -p tcp –tcp-flags ALL NONE -j DROP

iptables -A INPUT -p tcp ! –syn -m state –state NEW -j DROP

iptables -A OUTPUT -p tcp ! –syn -m state –state NEW -j DROP

iptables -A FORWARD -i enp3s0 -o ppp0 -j ACCEPT

iptables -A FORWARD -i ppp0 -o enp3s0 -j REJECT

iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.1.0/24 -j MASQUERADE ''' ppp0 это pppoe провардейский. После коннекта коннекта к VPN в этом интерфейсе появляется IP VPN.

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

Извиняюсь, с телефона пишу, оформить красиво нет возможности. В общем, если у тебя ppp0 это провайдерский PPPoE, то при поднятом PPPoE поднимая VPN - интерфейс VPN должен подняться под ppp1. Если же, он заменяет провайдерский ppp0 (PPPoE), то какое имя при этом становится у провайдерского PPPoE? Самое простое что приходит в голову, переименуй PPPoE в какой-нибудь ppp100 или наоборот, ВПН переименуй,и уже в правилах iptables укажи, через какой pppX выпускать локалку в инет. И убери это «iptables -A FORWARD -i ppp0 -o enp3s0 -j REJECT»

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

iptables -A FORWARD -i ppp0 -o enp3s0 -j REJECT Уже сам заметил, что глупо блочить свою локалку )))). При коннекте к VPN, ip vpn добавляется к провайдерскому в этом интерфейсе. Вывод примерно такой(c другого похожего ПК):

 pppo: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 1000
    link/ether ce:85:84:38:a3:27 brd ff:ff:ff:ff:ff:ff 
IP провайдера   
   inet 192.168.42.155/24 brd 192.168.42.255 scope global dynamic noprefixroute enp0s6u2
       valid_lft 3536sec preferred_lft 3536sec
IP VPN
    inet 10.10.10.5/32 scope global enp0s6u2
       valid_lft forever preferred_lft forever
    inet6 fe80::fdf4:8d10:539d:48c6/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

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

у VPN айпишник постоянный прилетает? или каждый дозвон - разные адреса? Если постоянный, то: это:

iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.1.0/24 -j MASQUERADE
поменять на это (10.10.10.5 - айпи VPN интерфейса):
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.1.0/24 -j SNAT --to-source 10.10.10.5

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

К сожалению разные: 10.10.10.0/24. Хм… может можно как-то на сервере с VPN(strongsawan) в настройках закрепить ip для клиента. Попробую поискать как это можно сделать. или … может есть элегантное решение…? СПС.

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

давай попробуем дергать новый IP и скриптом создавать правило для NAT
Подними VPN и выполни:

ip addr show ppp0 | grep "inet" | grep "peer" | awk '{print $2}'
Потом переподключи VPN, чтоб адрес поменялся и опять выполни:
ip addr show ppp0 | grep "inet" | grep "peer" | awk '{print $2}'
Каждый раз когда выполняешь вышеуказанную команду, должно в ответ выдавать IP VPN интерфейса. Грубо говоря, вышеуказанная команда делает вырезку из вывода ip addr show ppp0 значение, которое записано между словами «inet» и «peer» Мой пример:
[root@homeserver etc]# ip addr show ppp0
4: ppp0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1450 qdisc pfifo_fast state UNKNOWN group default qlen 3
    link/ppp
    inet 10.169.33.7 peer 10.169.33.1/32 scope global ppp0
       valid_lft forever preferred_lft forever
[root@homeserver etc]#
[root@homeserver etc]# ip addr show ppp0 | grep "inet" | grep "peer" | awk '{print $2}'
10.169.33.7
[root@homeserver etc]#

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

Идею я понял. парсим вывод, получаем IP и делаем правило

ip tablses ... SNAT --to-source IP
Как узнать, что произошел реконнект к VPN( изменился полученный адрес от VPN)? Постоянно парсить вывод ip интерфейсов?

Я тут чуть покопался wiki.strongswan , но там много английских букв ))).

На сколько я понял надо всего лишь

iptables -t nat -I POSTROUTING -m policy --pol ipsec --dir out -j ACCEPT
и все должно работать.

Вроде есть еще один вариант. Создать новый интерфейс https://wiki.strongswan.org/projects/strongswan/wiki/RouteBasedVPN (там то же много английского к сожалннию для меня) и прописать маршрут.

stas_barmy ()