суббота, 30 июля 2016 г.

Начинаю изучать FreeBSD

Милости прошу к нашему сервашу.





По долгу службы, да и на благо родины + ради саморазвития решил я изучить фряху и ее возможности роутинга.
Вот тривиальная задача - есть роутер на фре с двумя провайдерами, за которым через свитч подрублены 2 тачки (172.16.0.2 и 172.16.0.3)
На роутере есть 2 интернета - первый работает через дефолтный шлюз, у второго openvpn интерфейса (tap0) айпи адрес 10.0.0.2 и шлюз 10.0.0.1
Нужно чтоб первая клиентская тачка (172.16.0.2) ходила через первый инет (дефолтный шлюз), и вторая (172.16.0.3) через второй. При этом нужно чтоб машина с IP 172.16.0.3 могла заходить по ssh на роутер наш фряшный (172.16.0.1) и получать доступ к сервисам на нем (ssh, proxy etc).

Таки запилил, ничего сложного.

1) Пересобираем ядро ОС с нужными нам параметрами, устанавливаем, ребутаемся.

options         IPFIREWALL
options         IPFIREWALL_VERBOSE
options         IPFIREWALL_VERBOSE_LIMIT=50
options         IPFIREWALL_NAT
options         LIBALIAS
options         ROUTETABLES=16
options         DUMMYNET
options         HZ="1000"
options         IPFIREWALL_DEFAULT_TO_ACCEPT

2) Настраиваем сеть.
3) Настраиваем IPFW

Конфиг IPFW, его нужно разбить на 2 части и 1 часть исполнять после загрузки ос и поднятия интерфейса em0, вторую часть после загрузки и поднятия интерфейса tap0  (тама где двойка + последняя строка касается интерфейса tap0), последних 2 строки тоже исполнять после поднятия tap0

#!/bin/sh
/sbin/ipfw -q flush
/sbin/ipfw disable one_pass
/sbin/ipfw nat 1 config if em0 reset same_ports
/sbin/ipfw nat 2 config if tap0 reset same_ports
/sbin/ipfw add nat 1 ip from 172.16.0.2 to any out
/sbin/ipfw add nat 2 ip from 172.16.0.3 to any out via em0
/sbin/ipfw add nat 1 ip from not me to any in
/sbin/ipfw add nat 2 ip from not me to any in via tap0
/sbin/ipfw add fwd 10.0.0.1 ip from 172.16.0.3 to not me



и не забываем добавить в /etc/rc.conf
gateway_enable="YES"  (врубаем форвардинг пакетов в ядре)
в /etc/sysctl.conf
net.inet.ip.fastforwarding=1   (врубаем быстрый фовардинг - будет пахать быстрее на 20-30%, но может побить фреймы IPSec, если он используется.

проверил на машинах 172.16.0.2 и 172.16.0.3 действительно первая ходит через первый инет вторая через второй

поднимаем SOCKS5 прокси для второго провайдера (VPN)!!!
копируем /etc/ssh/sshd_config в /etc/ssh/sshd_config_fib1
редактируем конфиг sshd_config_fib1, задаем порт отличный от стандартного ssh (например 23), и listen 127.0.0.1

используя команду setfib, прокладываем маршрут по 1 шлюзу через tap0
setfib 1 route add default 10.0.0.1
запускаем после подключения к интерфейсу tap0
setfib 1 /usr/sbin/sshd -f /etc/ssh/sshd_config_fib1

и сопсно запускаем соксик:

 nohup sshpass -p [пароль_рута] ssh -p 23 -N -D 192.168.0.250:1089 root@localhost &
можно создать отдельного юзера и от него запускать сокс

все, на интерфейсе 192.168.0.250 на 1089 появился соксик пятый который виден из локалки и пашет через 2 провайдера.

чтоб поднять сокс для 1 прова нужно просто выполнить 
 nohup sshpass -p [пароль_рута] ssh -p 22 -N -D 192.168.0.250:1090 root@localhost &

все, на интерфейсе 192.168.0.250 на 1089 появился соксик пятый который виден из локалки и пашет через 1 провайдера.

это если ssh дефолтный висит на 22 порту (а это как бы не круто, не забываем его перевесить на 2244 хотя бы).