freebsd маршрутизация без NAT, KomaLex, 28-Дек-24, 14:49 [смотреть все]Подскажите в чем может быть проблема, никак не могу понять в чем затык. Общая схема: 1. Есть в локальной сети сервер FreeBSD у него один интерфейс: 192.168.11.17/24 шлюз 192.168.11.254, так же на нем поднят openvpn клиент до впн сервера в интернете. Адрес на интерфейсе vpn tun0 10.23.23.5, адрес на серверной стороне туннеля 10.23.23.1 Так же на нем включен форвардинг в rc.conf
gateway_enable="YES"
ifconfig
em0: flags=1008843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST,LOWER_UP> metric 0 mtu 1500 options=48525bb<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,JUMBO_MTU,VLAN_HWCSUM,TSO4,LRO,WOL_MAGIC,VLAN_HWFILTER,VLAN_HWTSO,HWSTATS,MEXTPG> ether 6a:c8:76:e2:46:98 inet 192.168.11.17 netmask 0xffffff00 broadcast 192.168.11.255 media: Ethernet autoselect (1000baseT <full-duplex>) status: active nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL> lo0: flags=1008049<UP,LOOPBACK,RUNNING,MULTICAST,LOWER_UP> metric 0 mtu 16384 options=680003<RXCSUM,TXCSUM,LINKSTATE,RXCSUM_IPV6,TXCSUM_IPV6> inet 127.0.0.1 netmask 0xff000000 inet6 ::1 prefixlen 128 inet6 fe80::1%lo0 prefixlen 64 scopeid 0x2 groups: lo nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL> tun0: flags=1008043<UP,BROADCAST,RUNNING,MULTICAST,LOWER_UP> metric 0 mtu 1500 options=80000<LINKSTATE> inet 10.23.23.5 netmask 0xffffff00 broadcast 10.23.23.255 groups: tun nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL> Opened by PID 756
Для проверки адрес 8.8.8.8 завернул в туннель netstat -nr
default 192.168.11.254 UGS em0 8.8.8.8 10.23.23.1 UGHS tun0 10.23.23.0/24 link#3 U tun0 10.23.23.5 link#2 UHS lo0 127.0.0.1 link#2 UH lo0 192.168.11.0/24 link#1 U em0 192.168.11.17 link#2 UHS lo0
2. Есть сервер в интернете ubuntu 22.04, на нем openvpn сервер, принимающий подключения. Задача приходящий трафик из туннеля отправлять в интернет через nat на внешний интерфейс На этом сервере стоит iptables, все что можно уже открыл на нем:
iptables -S
-P INPUT ACCEPT -P FORWARD ACCEPT -P OUTPUT ACCEPT -A INPUT -i ens3 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -A INPUT -i ens3 -m conntrack --ctstate INVALID -j DROP -A INPUT -i ens3 -p tcp -m tcp --dport 1194 -j ACCEPT -A INPUT -i ens3 -p tcp -m tcp --dport 22 -j ACCEPT -A INPUT -i ens3 -p tcp -m tcp --dport 53 -j ACCEPT -A INPUT -i ens3 -p udp -m udp --dport 53 -j ACCEPT -A INPUT -i tun0 -j ACCEPT -A INPUT -s 192.168.11.0/24 -i tun0 -j ACCEPT -A INPUT -i ens3 -p udp -m udp --dport 500 -j ACCEPT -A INPUT -i ens3 -p udp -m udp --dport 4500 -j ACCEPT -A INPUT -i ens3 -p esp -j ACCEPT -A INPUT -i ens3 -p ah -j ACCEPT -A INPUT -i ens3 -p udp -m policy --dir in --pol ipsec -m udp --dport 1701 -j ACCEPT -A INPUT -i ens3 -j DROP -A FORWARD -i ens3 -o tun0 -j ACCEPT -A FORWARD -i tun0 -o ens3 -j ACCEPT -A FORWARD -i ens3 -o tun0 -m state --state RELATED,ESTABLISHED -j ACCEPT
Собственно задача маршрутизировать на сервере 1 в локальной сети, нужный трафик в туннель (для проверки прописал маршрут до 8.8.8.8 через туннель), на сервере 2 принимать из тунеля и через нат отправлять в интернет Если я отправляю пакеты с сервера 1 на freebsd пакеты на адрес 8.8.8.8 все замечательно работает, пакеты идут через туннель и сервер в интернете. А вот если я с другого компьютера отправляю пакеты и в качестве шлюза указываю сервер 1, то те пакеты, которые должны идти по дефолтному маршруту просто в интернет идут без проблем, а те что должны идти через туннель не идут. Причет они на сервере 1 на интерфейсе туннеля появляются: 192.168.11.22 адрес компьютера с которого отправляю пакеты tcpdump -host 192.168.11.22 -i tun0
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode listening on tun0, link-type NULL (BSD loopback), snapshot length 262144 bytes 19:47:36.781754 IP 192.168.11.22 > dns.google: ICMP echo request, id 1, seq 158, length 40 19:47:41.467940 IP 192.168.11.22 > dns.google: ICMP echo request, id 1, seq 159, length 40 19:47:46.481366 IP 192.168.11.22 > dns.google: ICMP echo request, id 1, seq 160, length 40 19:47:51.473760 IP 192.168.11.22 > dns.google: ICMP echo request, id 1, seq 161, length 40
А вот на сервере 2 в интерфейсе туннеля уже ничего нет. Мне не нужен файервол на сервере 1 и нат там не нужен, нужно просто пересылать пакеты в туннель. Подскажите что и где не так. Вроде задача то простая, но не идут пакеты.
|
- freebsd маршрутизация без NAT, Pahanivo, 23:32 , 28-Дек-24 (1)
> Подскажите что и где не так. Вроде задача то простая, но не > идут пакеты.Вангую в tun с сервака они летят с src тоннеля, а при маршрутизации srс локалки, и впн (запрещено в российской федерации) хз что с твоими локальными адресами делать у себя. Вообще странно, строишь систему из двух серваках, а маршрутизацию настраиваешь только на одном. > нужно просто пересылать пакеты в туннель мы все прекрасно понимаем что тебе нужно > "freebsd маршрутизация без NAT" > -P INPUT ACCEPT и заголовки внятные пиши, а то бегло пролистав подумал что ты обкурился ))
- freebsd маршрутизация без NAT, KomaLex, 06:10 , 29-Дек-24 (2)
>[оверквотинг удален] > маршрутизации srс локалки, и впн (запрещено в российской федерации) хз что > с твоими локальными адресами делать у себя. > Вообще странно, строишь систему из двух серваках, а маршрутизацию настраиваешь только на > одном. >> нужно просто пересылать пакеты в туннель > мы все прекрасно понимаем что тебе нужно >> "freebsd маршрутизация без NAT" >> -P INPUT ACCEPT > и заголовки внятные пиши, а то бегло пролистав подумал что ты обкурился > )) На втором сервере, который должен выпускать из туннеля в интернет, маршрутизация тоже настроена.
# route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface default gateway.reserve 0.0.0.0 UG 0 0 0 ens3 10.22.22.100 0.0.0.0 255.255.255.255 UH 0 0 0 ppp0 10.22.22.101 0.0.0.0 255.255.255.255 UH 0 0 0 ppp1 10.22.22.102 0.0.0.0 255.255.255.255 UH 0 0 0 ppp2 10.22.22.103 0.0.0.0 255.255.255.255 UH 0 0 0 ppp3 10.22.22.104 0.0.0.0 255.255.255.255 UH 0 0 0 ppp4 10.23.23.0 0.0.0.0 255.255.255.0 U 0 0 0 tun0 x.y.z.0 0.0.0.0 255.255.255.0 U 0 0 0 ens3 192.168.11.0 10.23.23.5 255.255.255.0 UG 0 0 0 tun0
Пробовал на втором сервере на интерфесе тунеля вешать нат, не помогает. Хотя это вряд ли влияет. По идее при такой схеме, ну по крайней мере мне так нужно, на внешний интерфейс второго сервера должен приходить пакет с обратным адресом из подсети 192.168.11.0/24 и там уже нат меняет алрес. Но почему то не дохоит куда надо пакет. Тунель внутри ssh, провайдер ничего не видит и не блокирует.
- freebsd маршрутизация без NAT, anonymous, 13:07 , 29-Дек-24 (3) –3
А какие машруты на компутире в локалке?
- freebsd маршрутизация без NAT, Pahanivo, 20:47 , 29-Дек-24 (6)
> А какие машруты на компутире в локалке?очевидно нормальные если нюхаются пакеты на влете в тоннель.
- freebsd маршрутизация без NAT, KomaLex, 07:11 , 08-Янв-25 (8)
> А какие машруты на компутире в локалке? 0.0.0.0 0.0.0.0 192.168.11.254 192.168.11.22 25 8.8.8.8 255.255.255.255 192.168.11.17 192.168.11.22 26 10.23.23.0 255.255.255.0 192.168.11.17 192.168.11.22 26
Пингую адрес 8.8.8.8
- freebsd маршрутизация без NAT, Pahanivo, 20:52 , 29-Дек-24 (7)
Нюхай интерфейсы на втором серве и смотри фаер - куда то пакет девается если в тоннель залетает нормально.
- freebsd маршрутизация без NAT, sqrtly, 10:10 , 30-Янв-25 (13)
>[оверквотинг удален] > 192.168.11.0 10.23.23.5 255.255.255.0 > UG 0 > 0 0 tun0 > > Пробовал на втором сервере на интерфесе тунеля вешать нат, не помогает. Хотя > это вряд ли влияет. По идее при такой схеме, ну по > крайней мере мне так нужно, на внешний интерфейс второго сервера должен > приходить пакет с обратным адресом из подсети 192.168.11.0/24 и там уже > нат меняет алрес. Но почему то не дохоит куда надо пакет. > Тунель внутри ssh, провайдер ничего не видит и не блокирует.Попробуйте выполнить ping с компьютера, который посылает пакеты, на адрес 8.8.8.8 и посмотрите, отражаются ли эти пинг-запросы на сервере 1 и на сервере 2: На сервере 1: sh language-bash Копировать код tcpdump -i tun0 На сервере 2: sh language-bash Копировать код tcpdump -i ens3
- freebsd маршрутизация без NAT, Tron is Whistling, 18:24 , 29-Дек-24 (4)
На убунте sysctl net.ipv4.ip_forward в единичку выставлен, надеюсь?
- freebsd маршрутизация без NAT, Tron is Whistling, 18:26 , 29-Дек-24 (5)
Дальше: пакетов от 192.168.11.22 на ens3 не появляется? Что говорит tcpdump? Дальше: что в -t nat в iptables?
- freebsd маршрутизация без NAT, KomaLex, 07:24 , 08-Янв-25 (9)
> Дальше: пакетов от 192.168.11.22 на ens3 не появляется? Что говорит tcpdump? > Дальше: что в -t nat в iptables?Естественно вытсавлен
net.ipv4.ip_forward = 1
iptables -t nat -L
Chain PREROUTING (policy ACCEPT) target prot opt source destinationChain INPUT (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination Chain POSTROUTING (policy ACCEPT) target prot opt source destination MASQUERADE all -- 10.22.22.0/24 anywhere MASQUERADE all -- 10.23.23.0/24 anywhere MASQUERADE all -- 192.168.11.0/24 anywhere MASQUERADE all -- anywhere anywhere
iptables -t nat -S
-P PREROUTING ACCEPT -P INPUT ACCEPT -P OUTPUT ACCEPT -P POSTROUTING ACCEPT -A POSTROUTING -s 10.22.22.0/24 -o ens3 -j MASQUERADE -A POSTROUTING -s 10.23.23.0/24 -o ens3 -j MASQUERADE -A POSTROUTING -s 192.168.11.0/24 -o ens3 -j MASQUERADE -A POSTROUTING -o tun0 -j MASQUERADE
tcpdump на шлюзе 192.168.11.17 tcpdump host 192.168.11.22 -i tun0
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode listening on tun0, link-type NULL (BSD loopback), snapshot length 262144 bytes 12:20:31.295146 IP 192.168.11.22 > dns.google: ICMP echo request, id 1, seq 200, length 40 12:20:36.319112 IP 192.168.11.22 > dns.google: ICMP echo request, id 1, seq 201, length 40 12:20:41.312576 IP 192.168.11.22 > dns.google: ICMP echo request, id 1, seq 202, length 40 12:20:46.318955 IP 192.168.11.22 > dns.google: ICMP echo request, id 1, seq 203, length 40
пакеты видит, а вот на интерфейсе тунеля на сервере уже нет, либо он их отбрасывает где то до того как они попадают в tcpdump tcpdump host 192.168.11.22 -i tun0
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode listening on tun0, link-type RAW (Raw IP), snapshot length 262144 bytes
Пусто хотя в это время пинги идут
- freebsd маршрутизация без NAT, Alex5Anc, 21:58 , 12-Янв-25 (10)
> iptables -t nat -S > -A POSTROUTING -s 192.168.11.0/24 -o ens3 -j MASQUERADE > -A POSTROUTING -o tun0 -j MASQUERADE ... > пакеты видит, а вот на интерфейсе тунеля на сервере уже нет, либо > он их отбрасывает где то до того как они попадают в > tcpdump > tcpdump host 192.168.11.22 -i tun0 > Пусто хотя в это время пинги идут Мыслей не возникает почему оно так?
- freebsd маршрутизация без NAT, KomaLex, 05:08 , 13-Янв-25 (11)
>> iptables -t nat -S >> -A POSTROUTING -s 192.168.11.0/24 -o ens3 -j MASQUERADE >> -A POSTROUTING -o tun0 -j MASQUERADE > ... >> пакеты видит, а вот на интерфейсе тунеля на сервере уже нет, либо >> он их отбрасывает где то до того как они попадают в >> tcpdump >> tcpdump host 192.168.11.22 -i tun0 >> Пусто хотя в это время пинги идут > Мыслей не возникает почему оно так?Пока что-то нет. Есть небольшая странность, если я с сервера в интернете пингую внутренние адреса, из подсети 192.168.11.0/24 в tcpdump показывает внутреннее имя серверва, которое разрешается в локалхост 127.0.0.1, это очень странно, поскольку маршрут в подсеть 192.168.11.0/24 стоит через интерфейс тунеля и по идее, он должен отправлять пакеты с адреса висящего на тунеле. Хотя с другой стороны, это не должно влиять. Потому, что на тунеле висит безусловный нат и он натом дожен все равно менять адрес на адрес тунеля. Да и на пакеты проходящие со стороны локальной подсети это не влияет. Они вообще не доходят.
- freebsd маршрутизация без NAT, KomaLex, 10:05 , 13-Янв-25 (12)
>[оверквотинг удален] > Пока что-то нет. Есть небольшая странность, если я с сервера в интернете > пингую внутренние адреса, из подсети 192.168.11.0/24 в tcpdump показывает внутреннее имя > серверва, которое разрешается в локалхост 127.0.0.1, это очень странно, поскольку маршрут > в подсеть 192.168.11.0/24 стоит через интерфейс тунеля и по идее, он > должен отправлять пакеты с адреса висящего на тунеле. Хотя с другой > стороны, это не должно влиять. Потому, что на тунеле висит безусловный > нат и он натом дожен все равно менять адрес на адрес > тунеля. > Да и на пакеты проходящие со стороны локальной подсети это не влияет. > Они вообще не доходят.В общем, пересобрал ядро, через ipfw nat все заработало. Но очень странно, хотелось бы все таки разобраться почему без ната не хочет работать. Канал в общем то тестовый, если есть интерес и идеи готов потестить.
|