Подскажите в чем может быть проблема, никак не могу понять в чем затык.
Общая схема:
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 и нат там не нужен, нужно просто пересылать пакеты в туннель.
Подскажите что и где не так. Вроде задача то простая, но не идут пакеты.
> Подскажите что и где не так. Вроде задача то простая, но не
> идут пакеты.Вангую в tun с сервака они летят с src тоннеля, а при маршрутизации srс локалки, и впн (запрещено в российской федерации) хз что с твоими локальными адресами делать у себя.
Вообще странно, строишь систему из двух серваках, а маршрутизацию настраиваешь только на одном.> нужно просто пересылать пакеты в туннель
мы все прекрасно понимаем что тебе нужно
> "freebsd маршрутизация без NAT"
> -P INPUT ACCEPTи заголовки внятные пиши, а то бегло пролистав подумал что ты обкурился ))
>[оверквотинг удален]
> маршрутизации 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, провайдер ничего не видит и не блокирует.
А какие машруты на компутире в локалке?
> А какие машруты на компутире в локалке?очевидно нормальные если нюхаются пакеты на влете в тоннель.
> А какие машруты на компутире в локалке?
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
Нюхай интерфейсы на втором серве и смотри фаер - куда то пакет девается если в тоннель залетает нормально.
>[оверквотинг удален]
> 192.168.11.0 10.23.23.5 255.255.255.0
> UG 0
> 0 0 tun0
>
Попробуйте выполнить ping с компьютера, который посылает пакеты, на адрес 8.8.8.8 и посмотрите, отражаются ли эти пинг-запросы на сервере 1 и на сервере 2:
На сервере 1:
sh language-bash
Копировать код
tcpdump -i tun0
На сервере 2:
sh language-bash
Копировать код
tcpdump -i ens3
На убунте sysctl net.ipv4.ip_forward в единичку выставлен, надеюсь?
Дальше: пакетов от 192.168.11.22 на ens3 не появляется? Что говорит tcpdump?
Дальше: что в -t nat в iptables?
> Дальше: пакетов от 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 destinationChain OUTPUT (policy ACCEPT)
target prot opt source destinationChain 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 anywhereiptables -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 MASQUERADEtcpdump на шлюзе 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Пусто хотя в это время пинги идут
> 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
> Пусто хотя в это время пинги идутМыслей не возникает почему оно так?
>> 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 стоит через интерфейс тунеля и по идее, он должен отправлять пакеты с адреса висящего на тунеле. Хотя с другой стороны, это не должно влиять. Потому, что на тунеле висит безусловный нат и он натом дожен все равно менять адрес на адрес тунеля.
Да и на пакеты проходящие со стороны локальной подсети это не влияет. Они вообще не доходят.
>[оверквотинг удален]
> Пока что-то нет. Есть небольшая странность, если я с сервера в интернете
> пингую внутренние адреса, из подсети 192.168.11.0/24 в tcpdump показывает внутреннее имя
> серверва, которое разрешается в локалхост 127.0.0.1, это очень странно, поскольку маршрут
> в подсеть 192.168.11.0/24 стоит через интерфейс тунеля и по идее, он
> должен отправлять пакеты с адреса висящего на тунеле. Хотя с другой
> стороны, это не должно влиять. Потому, что на тунеле висит безусловный
> нат и он натом дожен все равно менять адрес на адрес
> тунеля.
> Да и на пакеты проходящие со стороны локальной подсети это не влияет.
> Они вообще не доходят.В общем, пересобрал ядро, через ipfw nat все заработало. Но очень странно, хотелось бы все таки разобраться почему без ната не хочет работать. Канал в общем то тестовый, если есть интерес и идеи готов потестить.