IPFW forward NAT+VPN

Проблемы установки, настройки и работы Правильной Операционной Системы

Модератор: terminus

Правила форума
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Demontager
ефрейтор
Сообщения: 68
Зарегистрирован: 2011-06-27 23:11:48
Откуда: Украина
Контактная информация:

IPFW forward NAT+VPN

Непрочитанное сообщение Demontager » 2022-06-20 12:20:54

Есть Freebsd сервер, через который осуществляется доступ в Интернет локальных клиентов. При этом, на Freebsd также запускается vpn соединение через которое локальные клиенты должны выходить в Интернет.
eu0 - смотрит в Интернет
eu1 - локальный интерфейс
tun0 - vpn соединение

Код: Выделить всё

# ifconfig -a
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
        options=680003<RXCSUM,TXCSUM,LINKSTATE,RXCSUM_IPV6,TXCSUM_IPV6>
        inet6 ::1 prefixlen 128
        inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1
        inet 127.0.0.1 netmask 0xff000000
        groups: lo
        nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
ue0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=80009<RXCSUM,VLAN_MTU,LINKSTATE>
        ether b8:27:eb:9f:19:56
        inet 192.168.1.15 netmask 0xffffff00 broadcast 192.168.1.255
        media: Ethernet autoselect (100baseTX <full-duplex>)
        status: active
        nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
ue1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=80008<VLAN_MTU,LINKSTATE>
        ether 34:76:c5:08:0b:3f
        inet 172.16.1.1 netmask 0xffffff00 broadcast 172.16.1.255
        media: Ethernet autoselect (100baseTX <full-duplex>)
        status: active
        nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
tun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> metric 0 mtu 1500
        options=80000<LINKSTATE>
        inet 10.8.0.3 --> 10.8.0.1 netmask 0xffffff00
        inet6 fddd:1194:1194:1194::1001 prefixlen 64
        inet6 fe80::ba27:ebff:fe9f:1956%tun0 prefixlen 64 scopeid 0x4
        groups: tun
        nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
        Opened by PID 3472

Маршруты

Код: Выделить всё

# netstat -nr4
Routing tables

Internet:
Destination        Gateway            Flags     Netif Expire
0.0.0.0/1          10.8.0.1           UGS        tun0
default            192.168.1.1        UGS         ue0
10.8.0.0/24        10.8.0.1           UGS        tun0
10.8.0.1           link#4             UH         tun0
10.8.0.3           link#4             UHS         lo0
127.0.0.1          link#1             UH          lo0
128.0.0.0/1        10.8.0.1           UGS        tun0
172.16.1.0/24      link#3             U           ue1
172.16.1.1         link#3             UHS         lo0
178.32.216.92      192.168.1.1        UGHS        ue0
192.168.1.0/24     link#2             U           ue0
192.168.1.15       link#2             UHS         lo0

192.168.1.1 - это ip шлюза ISP через который Freebsd сервей получает Интернет

rc.conf


Код: Выделить всё

# cat /etc/rc.conf
hostname="freebsdPI"
ifconfig_ue0="DHCP"
ifconfig_ue1="inet 172.16.1.1 netmask 255.255.255.0"

#
gateway_enable="YES"
firewall_enable="YES"
firewall_nat_enable="YES"
firewall_logging="YES"
natd_enable="YES"
natd_interface="ue0"

#
dnsmasq_enable="YES"
sshd_enable="YES
Нужно чтобы клиенты eu1 получали интернет через tun0 и не знали что они ходят через vpn. Для linux я нашел готовый конфиг и проверил, он работает, привожу его ниже(имена интерфейсов заменил на те, что присутствуют в freebsd).

Код: Выделить всё

#!/bin/bash
IPTABLES="/sbin/iptables"

# ACCEPT everything by default.

$IPTABLES -P INPUT ACCEPT
$IPTABLES -P FORWARD ACCEPT
$IPTABLES -P OUTPUT ACCEPT

# Set the nat/mangle/raw tables' chains to ACCEPT
$IPTABLES -t nat -P PREROUTING ACCEPT
$IPTABLES -t nat -P OUTPUT ACCEPT
$IPTABLES -t nat -P POSTROUTING ACCEPT

$IPTABLES -t mangle -P PREROUTING ACCEPT
$IPTABLES -t mangle -P INPUT ACCEPT
$IPTABLES -t mangle -P FORWARD ACCEPT
$IPTABLES -t mangle -P OUTPUT ACCEPT
$IPTABLES -t mangle -P POSTROUTING ACCEPT

# Cleanup - Delete all iptables-rules.
#------------------------------------------------------------------------------

# Delete all
$IPTABLES -F
$IPTABLES -t nat -F
$IPTABLES -t mangle -F

# Delete all
$IPTABLES -X
$IPTABLES -t nat -X
$IPTABLES -t mangle -X

# Zero all packets and counters.
$IPTABLES -Z
$IPTABLES -t nat -Z
$IPTABLES -t mangle -Z

#------------------------------------------------------------------------------    

$IPTABLES -t nat -A POSTROUTING -o ue0 -j MASQUERADE
$IPTABLES -A FORWARD -i ue0 -o ue1 -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPTABLES -A FORWARD -i ue1 -o ue0 -j ACCEPT

#VPN
$IPTABLES -t nat -A POSTROUTING -o tun0 -j MASQUERADE
$IPTABLES -A FORWARD -i tun0 -o ue1 -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPTABLES -A FORWARD -i ue1 -o tun0 -j ACCEPT

Filter таблица при этом

Код: Выделить всё

# iptables -vL -t filter
Chain INPUT (policy ACCEPT 154M packets, 197G bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain FORWARD (policy ACCEPT 2 packets, 614 bytes)
 pkts bytes target     prot opt in     out     source               destination         
 104K  233M ACCEPT     all  --  ue0 ue1  anywhere             anywhere             state RELATED,ESTABLISHED
 113K   12M ACCEPT     all  --  ue1 ue0  anywhere             anywhere            
 151M  186G ACCEPT     all  --  tun0   ue1  anywhere             anywhere             state RELATED,ESTABLISHED
  72M   12G ACCEPT     all  --  ue1 tun0    anywhere             anywhere            

Chain OUTPUT (policy ACCEPT 73M packets, 16G bytes)
 pkts bytes target     prot opt in     out     source               destination   

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

lazhu
сержант
Сообщения: 240
Зарегистрирован: 2013-08-10 14:28:38
Контактная информация:

IPFW forward NAT+VPN

Непрочитанное сообщение lazhu » 2022-06-20 13:49:22

Код: Выделить всё

ipfw="`which ipfw` -q"
${ipfw} nat 1 config log if tun0 reset same_ports deny_in
${ipfw} add allow ip from me to any via ue0
${ipfw} add allow ip from any to me via ue0
${ipfw} add deny ip from 172.16.1.0/24 to any via ue0
${ipfw} add deny ip from any to 172.16.1.0/24 via ue0
${ipfw} nat 1 ip from 172.16.1.0/24 to any via tun0
${ipfw} nat 1 ip from any to 172.16.1.0/24 via tun0
И уберите маршрут 0.0.0.0/1 и natd

Demontager
ефрейтор
Сообщения: 68
Зарегистрирован: 2011-06-27 23:11:48
Откуда: Украина
Контактная информация:

IPFW forward NAT+VPN

Непрочитанное сообщение Demontager » 2022-06-20 15:42:25

lazhu писал(а):
2022-06-20 13:49:22
И уберите маршрут 0.0.0.0/1 и natd
мне нужно чтобы маршрут на freebsd тоже шел через tun0. Т.е. чтобы присутсвовал

Код: Выделить всё

Internet:
Destination        Gateway            Flags     Netif Expire
0.0.0.0/1          10.8.0.1           UGS        tun0
в rc.conf закоментил natd и сделал ребут

Код: Выделить всё

#natd_enable="YES"
#natd_interface="ue0"
потом выполняю этот скрипт с вашимии строками

Код: Выделить всё

 #!/bin/sh
wan="ue0"
lan="ue1"
wan_int="dhcpd"
lan_int="172.16.1.1"
ipfw="/sbin/ipfw -q"

#Reset all rules:
${ipfw} -f flush
${ipfw} -f pipe flush
${ipfw} -f queue flush


${ipfw} nat 1 config log if tun0 reset same_ports deny_in
${ipfw} add allow ip from me to any via ue0
${ipfw} add allow ip from any to me via ue0
${ipfw} add deny ip from 172.16.1.0/24 to any via ue0
${ipfw} add deny ip from any to 172.16.1.0/24 via ue0
${ipfw} nat 1 ip from 172.16.1.0/24 to any via tun0
${ipfw} nat 1 ip from any to 172.16.1.0/24 via tun0

./firewal.sh
ipfw: bad command `ip'
ipfw: bad command `ip'

lazhu
сержант
Сообщения: 240
Зарегистрирован: 2013-08-10 14:28:38
Контактная информация:

IPFW forward NAT+VPN

Непрочитанное сообщение lazhu » 2022-06-20 15:55:50

забыл 'add' перед nat
mea culpa

Demontager
ефрейтор
Сообщения: 68
Зарегистрирован: 2011-06-27 23:11:48
Откуда: Украина
Контактная информация:

IPFW forward NAT+VPN

Непрочитанное сообщение Demontager » 2022-06-20 17:03:52

lazhu писал(а):
2022-06-20 15:55:50
забыл 'add' перед nat
Добавил, ./firewall.sh прошло без ошибок. Но на клиентах не появился интернет. Тест с клиента.

Код: Выделить всё

#traceroute 8.8.8.8   
traceroute to 8.8.8.8 (8.8.8.8), 64 hops max, 52 byte packets
 1  172.16.1.1 (172.16.1.1)  1.073 ms  1.077 ms  0.843 ms
 2  * * *
 3  * * *
 4  * * *
 5  * * *
 6  * * *
 7  * * *
 8  * * *
ipfw show на freebsd сервере

Код: Выделить всё

# ipfw show
00100  16   1476 allow ip from me to any via ue0
00200  28   1912 allow ip from any to me via ue0
00300   0      0 deny ip from 172.16.1.0/24 to any via ue0
00400   0      0 deny ip from any to 172.16.1.0/24 via ue0
00500   0      0 nat 1 ip from 172.16.1.0/24 to any via tun0
00600   0      0 nat 1 ip from any to 172.16.1.0/24 via tun0
65535 607 103806 allow ip from any to any

Проверяю наличие пакетов от клиента

Код: Выделить всё

#tcpdump -i ue1
17:01:15.501156 IP 172.16.1.72.62372 > dns.google.domain: 7668+ PTR? 1.1.16.172.in-addr.arpa. (41)
17:01:15.572924 IP 172.16.1.72.27783 > dns.google.domain: 27849+ A? dns.google. (28)
17:01:15.572974 IP 172.16.1.72.56548 > dns.google.domain: 65392+ A? dns.google. (28)
17:01:15.574533 IP 172.16.1.72.26687 > dns.google.domain: 46370+ A? dns.google. (28)
17:01:15.574791 IP 172.16.1.72.54767 > dns.google.domain: 59309+ A? dns.google. (28)
17:01:15.575282 IP 172.16.1.72.47869 > dns.google.domain: 45225+ A? dns.google. (28)
17:01:15.575539 IP 172.16.1.72.3774 > dns.google.domain: 39807+ A? dns.google. (28)
17:01:15.575787 IP 172.16.1.72.19391 > dns.google.domain: 20861+ A? dns.google. (28)


lazhu
сержант
Сообщения: 240
Зарегистрирован: 2013-08-10 14:28:38
Контактная информация:

IPFW forward NAT+VPN

Непрочитанное сообщение lazhu » 2022-06-20 18:28:18

А вообще инет через tun0 работает? Если прописать маршруты так:

Код: Выделить всё

vpn_server 192.168.1.1
0.0.0.0/0  10.8.0.1

Demontager
ефрейтор
Сообщения: 68
Зарегистрирован: 2011-06-27 23:11:48
Откуда: Украина
Контактная информация:

IPFW forward NAT+VPN

Непрочитанное сообщение Demontager » 2022-06-20 21:26:32

lazhu писал(а):
2022-06-20 18:28:18
А вообще инет через tun0 работает?
Да, на Freebsd инет через тунель работает.

Код: Выделить всё

# traceroute 8.8.8.8
traceroute to 8.8.8.8 (8.8.8.8), 64 hops max, 40 byte packets
 1  10.8.0.1 (10.8.0.1)  120.922 ms  122.589 ms  121.055 ms
 2  178.32.216.253 (178.32.216.253)  121.452 ms  121.231 ms  121.611 ms
 3  10.17.50.64 (10.17.50.64)  121.848 ms  121.285 ms
    10.17.50.66 (10.17.50.66)  121.322 ms
 4  10.73.17.66 (10.73.17.66)  121.013 ms
    10.73.16.118 (10.73.16.118)  121.345 ms
    10.73.17.66 (10.73.17.66)  121.303 ms
 5  10.95.64.140 (10.95.64.140)  123.163 ms
    10.95.64.136 (10.95.64.136)  121.549 ms
    10.95.64.132 (10.95.64.132)  122.692 ms
 6  par-th2-sbb1-nc5.fr.eu (54.36.50.226)  202.301 ms
    par-gsw-sbb1-nc5.fr.eu (54.36.50.228)  125.763 ms  124.574 ms
 7  10.200.2.69 (10.200.2.69)  125.432 ms  125.438 ms
    10.200.2.65 (10.200.2.65)  124.825 ms
 8  * * *
 9  * * *
10  dns.google (8.8.8.8)  126.406 ms  126.751 ms  125.579 ms

Лог openvpn соединения

Код: Выделить всё

# openvpn --config kimsufi.ovpn
2022-06-20 21:20:44 Unrecognized option or missing or extra parameter(s) in kimsufi.ovpn:13: block-outside-dns (2.5.7)
2022-06-20 21:20:44 DEPRECATED OPTION: --cipher set to 'AES-256-CBC' but missing in --data-ciphers (AES-256-GCM:AES-128-GCM). Future OpenVPN version will ignore --cipher for cipher negotiations. Add 'AES-256-CBC' to --data-ciphers or change --cipher 'AES-256-CBC' to --data-ciphers-fallback 'AES-256-CBC' to silence this warning.
2022-06-20 21:20:44 OpenVPN 2.5.7 aarch64-portbld-freebsd13.0 [SSL (OpenSSL)] [LZO] [LZ4] [PKCS11] [MH/RECVDA] [AEAD] built on Jun  2 2022
2022-06-20 21:20:44 library versions: OpenSSL 1.1.1o-freebsd  3 May 2022, LZO 2.10
2022-06-20 21:20:44 Outgoing Control Channel Encryption: Cipher 'AES-256-CTR' initialized with 256 bit key
2022-06-20 21:20:44 Outgoing Control Channel Encryption: Using 256 bit message hash 'SHA256' for HMAC authentication
2022-06-20 21:20:44 Incoming Control Channel Encryption: Cipher 'AES-256-CTR' initialized with 256 bit key
2022-06-20 21:20:44 Incoming Control Channel Encryption: Using 256 bit message hash 'SHA256' for HMAC authentication
2022-06-20 21:20:44 TCP/UDP: Preserving recently used remote address: [AF_INET]178.32.216.92:1194
2022-06-20 21:20:44 Socket Buffers: R=[42080->42080] S=[9216->9216]
2022-06-20 21:20:44 UDP link local: (not bound)
2022-06-20 21:20:44 UDP link remote: [AF_INET]178.32.216.92:1194
2022-06-20 21:20:44 TLS: Initial packet from [AF_INET]178.32.216.92:1194, sid=dcf22a72 c71ccd41
2022-06-20 21:20:44 VERIFY OK: depth=1, CN=Easy-RSA CA
2022-06-20 21:20:44 VERIFY KU OK
2022-06-20 21:20:44 Validating certificate extended key usage
2022-06-20 21:20:44 ++ Certificate has EKU (str) TLS Web Server Authentication, expects TLS Web Server Authentication
2022-06-20 21:20:44 VERIFY EKU OK
2022-06-20 21:20:44 VERIFY OK: depth=0, CN=server
2022-06-20 21:20:44 Control Channel: TLSv1.3, cipher TLSv1.3 TLS_AES_256_GCM_SHA384, peer certificate: 2048 bit RSA, signature: RSA-SHA256
2022-06-20 21:20:44 [server] Peer Connection Initiated with [AF_INET]178.32.216.92:1194
2022-06-20 21:20:44 PUSH: Received control message: 'PUSH_REPLY,redirect-gateway def1 ipv6 bypass-dhcp,dhcp-option DNS 8.8.8.8,dhcp-option DNS 8.8.4.4,tun-ipv6,route-gateway 10.8.0.1,topology subnet,ping 10,ping-restart 120,ifconfig-ipv6 fddd:1194:1194:1194::1001/64 fddd:1194:1194:1194::1,ifconfig 10.8.0.3 255.255.255.0,peer-id 0,cipher AES-256-GCM'
2022-06-20 21:20:44 OPTIONS IMPORT: timers and/or timeouts modified
2022-06-20 21:20:44 OPTIONS IMPORT: --ifconfig/up options modified
2022-06-20 21:20:44 OPTIONS IMPORT: route options modified
2022-06-20 21:20:44 OPTIONS IMPORT: route-related options modified
2022-06-20 21:20:44 OPTIONS IMPORT: --ip-win32 and/or --dhcp-option options modified
2022-06-20 21:20:44 OPTIONS IMPORT: peer-id set
2022-06-20 21:20:44 OPTIONS IMPORT: adjusting link_mtu to 1624
2022-06-20 21:20:44 OPTIONS IMPORT: data channel crypto options modified
2022-06-20 21:20:44 Data Channel: using negotiated cipher 'AES-256-GCM'
2022-06-20 21:20:44 Outgoing Data Channel: Cipher 'AES-256-GCM' initialized with 256 bit key
2022-06-20 21:20:44 Incoming Data Channel: Cipher 'AES-256-GCM' initialized with 256 bit key
2022-06-20 21:20:44 ROUTE_GATEWAY 192.168.1.1/255.255.255.0 IFACE=ue0 HWADDR=b8:27:eb:9f:19:56
2022-06-20 21:20:44 GDG6: remote_host_ipv6=n/a
2022-06-20 21:20:44 GDG6: problem writing to routing socket: No such process (errno=3)
2022-06-20 21:20:44 ROUTE6: default_gateway=UNDEF
2022-06-20 21:20:44 TUN/TAP device /dev/tun0 opened
2022-06-20 21:20:44 /sbin/ifconfig tun0 10.8.0.3 10.8.0.1 mtu 1500 netmask 255.255.255.0 up
2022-06-20 21:20:44 /sbin/route add -net 10.8.0.0 10.8.0.1 255.255.255.0
add net 10.8.0.0: gateway 10.8.0.1 fib 0
2022-06-20 21:20:44 /sbin/ifconfig tun0 inet6 fddd:1194:1194:1194::1001/64 mtu 1500 up
2022-06-20 21:20:45 /sbin/ifconfig tun0 inet6 -ifdisabled
2022-06-20 21:20:45 /sbin/route add -net 178.32.216.92 192.168.1.1 255.255.255.255
add net 178.32.216.92: gateway 192.168.1.1 fib 0
2022-06-20 21:20:45 /sbin/route add -net 0.0.0.0 10.8.0.1 128.0.0.0
add net 0.0.0.0: gateway 10.8.0.1 fib 0
2022-06-20 21:20:45 /sbin/route add -net 128.0.0.0 10.8.0.1 128.0.0.0
add net 128.0.0.0: gateway 10.8.0.1 fib 0
2022-06-20 21:20:45 add_route_ipv6(::/3 -> fddd:1194:1194:1194::1 metric -1) dev tun0
2022-06-20 21:20:45 /sbin/route add -inet6 ::/3 -iface tun0
add net ::/3: gateway tun0 fib 0
2022-06-20 21:20:45 add_route_ipv6(2000::/4 -> fddd:1194:1194:1194::1 metric -1) dev tun0
2022-06-20 21:20:45 /sbin/route add -inet6 2000::/4 -iface tun0
add net 2000::/4: gateway tun0 fib 0
2022-06-20 21:20:45 add_route_ipv6(3000::/4 -> fddd:1194:1194:1194::1 metric -1) dev tun0
2022-06-20 21:20:45 /sbin/route add -inet6 3000::/4 -iface tun0
add net 3000::/4: gateway tun0 fib 0
2022-06-20 21:20:45 add_route_ipv6(fc00::/7 -> fddd:1194:1194:1194::1 metric -1) dev tun0
2022-06-20 21:20:45 /sbin/route add -inet6 fc00::/7 -iface tun0
add net fc00::/7: gateway tun0 fib 0
2022-06-20 21:20:45 WARNING: this configuration may cache passwords in memory -- use the auth-nocache option to prevent this
2022-06-20 21:20:45 Initialization Sequence Completed



snorlov
подполковник
Сообщения: 3917
Зарегистрирован: 2008-09-04 11:51:25
Откуда: Санкт-Петербург

IPFW forward NAT+VPN

Непрочитанное сообщение snorlov » 2022-06-21 0:53:21

Demontager, у вас в конфиге 2-а ната, ядерный и демон natd, потренируйтесь с каким-нибудь одним...

lazhu
сержант
Сообщения: 240
Зарегистрирован: 2013-08-10 14:28:38
Контактная информация:

IPFW forward NAT+VPN

Непрочитанное сообщение lazhu » 2022-06-21 1:00:45

Он уже закомментил натд. Судя по выводу ipfw, пакеты не натятся. А почему, телепатически не угадать. Я бы проверил на всякий форвард в sysctl

Demontager
ефрейтор
Сообщения: 68
Зарегистрирован: 2011-06-27 23:11:48
Откуда: Украина
Контактная информация:

IPFW forward NAT+VPN

Непрочитанное сообщение Demontager » 2022-06-21 10:32:55

snorlov писал(а):
2022-06-21 0:53:21
демон natd
Я закоментил, об этом выше писал, потом перезагрузил пк.

rc.conf

Код: Выделить всё

# cat /etc/rc.conf
hostname="freebsdPI"
ifconfig_ue0="DHCP"
ifconfig_ue1="inet 172.16.1.1 netmask 255.255.255.0"

#
gateway_enable="YES"
firewall_enable="YES"
firewall_nat_enable="YES"
firewall_logging="YES"
#natd_enable="YES"
#natd_interface="ue0"

#
dnsmasq_enable="YES"
sshd_enable="YES"
lazhu писал(а):
2022-06-21 1:00:45
пакеты не натятся. А почему, телепатически не угадать.
Я так понимаю что попадают под правило 00500, назад только не идут

Код: Выделить всё

# ipfw show
00100 3755 1140299 allow ip from me to any via ue0
00200 2007  335901 allow ip from any to me via ue0
00300    0       0 deny ip from 172.16.1.0/24 to any via ue0
00400    0       0 deny ip from any to 172.16.1.0/24 via ue0
00500 1583  120908 nat 1 ip from 172.16.1.0/24 to any via tun0
00600    0       0 nat 1 ip from any to 172.16.1.0/24 via tun0
65535 5742  863308 allow ip from any to any


Я еще проверял работу NAT через natd, таким правилом. Естественно в rc.conf были строки natd активны.

Код: Выделить всё

# cat firewall.sh
#!/bin/sh
wan="ue0"
lan="ue1"
wan_int="dhcpd"
lan_int="172.16.1.1"
ipfw="/sbin/ipfw -q"

#Reset all rules:
${ipfw} -f flush
${ipfw} -f pipe flush
${ipfw} -f queue flush

${ipfw} add allow ip from any to any via lo0
${ipfw} add deny ip from any to 127.0.0.0/8
${ipfw} add deny ip from 127.0.0.0/8 to any

${ipfw} add divert natd ip from any to any via ue0
${ipfw} add allow ip from any to any

тогда он работает, т.е. ue1 клиенты получают интернет, но работает только если нет тунеля.
lazhu писал(а):
2022-06-21 1:00:45


Я бы проверил на всякий форвард в sysctl
Как проверить?

lazhu
сержант
Сообщения: 240
Зарегистрирован: 2013-08-10 14:28:38
Контактная информация:

IPFW forward NAT+VPN

Непрочитанное сообщение lazhu » 2022-06-21 10:42:31

Код: Выделить всё

sysctl net.inet.ip.forwarding
Должно быть 1
Но дело похоже не в этом.
Перепишите правило 600 так:

Код: Выделить всё

${ipfw} add nat 1 ip from any to me via tun0
Собственно, можно сделать даже в одну строчку any to any

Demontager
ефрейтор
Сообщения: 68
Зарегистрирован: 2011-06-27 23:11:48
Откуда: Украина
Контактная информация:

IPFW forward NAT+VPN

Непрочитанное сообщение Demontager » 2022-06-21 14:33:14

lazhu писал(а):
2022-06-21 10:42:31
Должно быть 1
Там 1
lazhu писал(а):
2022-06-21 10:42:31
Перепишите правило 600 так:
переделал. Интернет через тунель у клиентов ue1 появился, ура, полдела сделано. Но есть проблемка, на Freebsd интернет пропал.

Код: Выделить всё

ipfw show
00100 18766  3226435 allow ip from me to any via ue0
00200 26943 28264760 allow ip from any to me via ue0
00300     0        0 deny ip from 172.16.1.0/24 to any via ue0
00400     0        0 deny ip from any to 172.16.1.0/24 via ue0
00500 20707  2460184 nat 1 ip from 172.16.1.0/24 to any via tun0
00600 25176 25273139 nat 1 ip from any to me via tun0
65535 49593 28513630 allow ip from any to any

Проверка на freebsd

Код: Выделить всё

root@freebsdPI:~ # traceroute 8.8.8.8
traceroute to 8.8.8.8 (8.8.8.8), 64 hops max, 40 byte packets
 1  * * *
 2  * * *
 3  * * *
 4  * *^C



lazhu
сержант
Сообщения: 240
Зарегистрирован: 2013-08-10 14:28:38
Контактная информация:

IPFW forward NAT+VPN

Непрочитанное сообщение lazhu » 2022-06-21 14:37:29

вместо двух правил сделайте одно
add nat 1 ip from any to any via tun0
Я-то вначале было подумал, что надо двух провайдеров разделить. А если весь интернет-трафик надо через впн пускать, то заворачивайте все в нат

snorlov
подполковник
Сообщения: 3917
Зарегистрирован: 2008-09-04 11:51:25
Откуда: Санкт-Петербург

IPFW forward NAT+VPN

Непрочитанное сообщение snorlov » 2022-06-21 20:40:31

В принципе можно просто

Код: Выделить всё

firewall_nat_interface="tun0"
firewall_type="OPEN"
, правда после того как подымется tun0 надо перестартовать ipfw, вы чем tun0 поднимаете? Другими словами надо чуть-чуть напильником попилить

Demontager
ефрейтор
Сообщения: 68
Зарегистрирован: 2011-06-27 23:11:48
Откуда: Украина
Контактная информация:

IPFW forward NAT+VPN

Непрочитанное сообщение Demontager » 2022-06-22 14:05:55

lazhu писал(а):
2022-06-21 14:37:29
вместо двух правил сделайте одно
Сделал, все теперь работает как ожидалось

Код: Выделить всё

# ipfw show
00100 1198  192200 allow ip from me to any via ue0
00200 1171 1019917 allow ip from any to me via ue0
00300    0       0 deny ip from 172.16.1.0/24 to any via ue0
00400    0       0 deny ip from any to 172.16.1.0/24 via ue0
00500 2331 1087269 nat 1 ip from any to any via tun0
65535 7031 2804329 allow ip from any to any

snorlov писал(а):
2022-06-21 20:40:31
вы чем tun0 поднимаете?
Стартую так, выше я вкладывал полный лог соединения

Код: Выделить всё

openvpn --daemon --config kimsufi.ovpn
snorlov писал(а):
2022-06-21 20:40:31
правда после того как подымется tun0 надо перестартовать ipfw
Да, есть такой нюанс, если запустить Ipfw до того как подниметься tun0, то тогда nat не работает

Код: Выделить всё

# ./firewall.sh 
ipfw: unknown interface name tun0

На Linux если делать тоже самое, то без разницы, можно и до поднятия tun0 запустить iptables nat, работает.

Demontager
ефрейтор
Сообщения: 68
Зарегистрирован: 2011-06-27 23:11:48
Откуда: Украина
Контактная информация:

IPFW forward NAT+VPN

Непрочитанное сообщение Demontager » 2022-06-23 12:17:37

Еще заметил один нюанс, если добавить автозапуск ipfw при загрузке, то блокируется трафик на freebsd и на клиентах ue1.

Код: Выделить всё

# ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8): 56 data bytes
ping: sendto: Permission denied

Помог запуск с отложенным запуском через crontab после поднятия тунеля.

Код: Выделить всё

@reboot /usr/local/sbin/openvpn --daemon --config /root/kimsufi.ovpn && sleep 5 && /root/firewall.sh

snorlov
подполковник
Сообщения: 3917
Зарегистрирован: 2008-09-04 11:51:25
Откуда: Санкт-Петербург

IPFW forward NAT+VPN

Непрочитанное сообщение snorlov » 2022-06-23 12:46:34

Ну для начала вы openvpn как запускаете, дополнительным скриптом или же через rc.d типа openvpn_enable="YES", если стандартно через rc.d, то в
/etc/rc.d/ipfw в строчку #REQUIRE... после ppp добавить openvpn