FreeBSD router kernel NAT ipfw GRE vpn server ok working

добавлено l2tp psk – еще чуть побыстрее работает  12-2017

связанная статья

еще pfsense

ipfw freebsd #FreeBSD настройка примеры Unix Linux развести интернет по всем компьютерам и связать магазин склад и офис !
пример рабочего конфига для маршрутизатора роутера на FreeBSD для выхода в Интернет в малом офисе а также соединения с точкой продаж магазином где 3 терминала в сети и сервер

(напоминаю что если сервер настраивается удаленный то убедитесь что скрипт ipfw правильный и выполнится без ошибок иначе на сервер больше не соединитесь никак – firewall заблокирует всю сеть вообще – после его загрузки или команды flush включается только последнее по списку правило 65535 запрещающее прохождение всех пакетов по сети. И что загрузка системы дойдет до rc.local без вопросов перед этими изменениями например не монтируются недоступные диски или сетевые накопители через etc fstab ).


server vpn with two connections – merge two LAN’s inbound port 1723 addr outbound from to 1723 port (2-nd LAN server at remote shop), GRE (encapsulated into IP) pass
to/from igb1 – internet interface.
(vpn PPTP site-to-site connect), port 4899 remote control Radmin for Windows – redirect to 4900 because many connections from Hacker.
handbook not ignore

а так более правильно бо сервер выделяет протокол gre 47 из ip и его пакеты подсчитываются (в примере выше нули)

вот вся отладка (правило 105 убрать – пакеты gre не проходят куда нужно – достаточно 100 правила – т.к. пакет GRE
находится внутри TCP -но ipfw умеет их различать и считает если выводить ipfw show)
правило 600 нужно – иначе входящий трафик на 1723 проходит но не получает ответ! но его надо уточнять!
как – пробую сейчас.

# читаем внимательно – как получается электронщики продавали схемы и платы да у нас на рынке который потом в Митино переехал – парочку дорожек замкнуто на питание и землю а в описании надо убрать 2 перемычки и одну добавить и тогда работает!



  • на 2012 сервере если он не раздает интернет – убрать из nat все интерфейсы кроме внутреннего.. а то может не пустить никого по сети 50 на 50! (bfe не настраивается и рубит все входящие соединения)
  • 2012 2012R2 server – use as VPN, not Intermet router – Nat interface only Internal ! remove all LAN from NAT section (NAT combine with Firewall – may random block any network traffic)


исправлено в декабре 2017

небольшой тест занявший 3 часа (много букав).

вообще у этой конфигурации есть исходник т. е. откуда она взята
FreeBSD Donate to FreeBSD
Get FreeBSD
FoundationForums > Server and Networking > Firewalls Significant network latency when using ipfw and in-kernel NAT


Discussion in ‘Firewalls‘ started by dreijer, Sep 13, 2012.


dreijer New Member


Hi there,

We’re running FreeBSD 9.0-RELEASE on a box whose primary purpose is to act as a firewall and a gateway. Up until today, we’ve been using ipfw(4) in conjunction with natd(8) and the divert action in ipfw(4) to forward packets between the FreeBSD box (i.e. the public Internet) and our private servers.

Unfortunately, natd(8) appears to be quite the CPU hog and we therefore decided to switch to the in-kernel NAT support in ipfw(4). The issue we’re running in to is that the network latency appears to be skyrocketing when ipfw(4) contains nat rules. Basically all TCP traffic
originating from the box times out and pinging on the box gives an average of ~10 SECONDS — and that’s even if I explicitly allow all ICMP traffic before the packets even get to the nat rules in ipfw.

The really odd part, however, is that I can ping the FreeBSD box just fine externally. For instance, pinging the server from my home connection gives an average of 45 ms. I’m also able to communicate just fine with the internal servers through the FreeBSD box.

Does anybody have any idea what’s going on? I assume I must’ve misconfigured something big here…

dreijer, Sep 13, 2012

AnonymousAnonymous Guest

I have a working setup with ipfw(8)() and in-kernel NAT on FreeBSD 8.3. I do not see the described latency, and pinging from the NAT machine gives almost the same round-trip time as from a client behind the NAT. Actually, the ping from the client expectedly takes a little bit longer.

You might want to post your NAT and IPFW rules.

I hope that it is not an 9.0 issue, since I am going to upgrade my server soon.


dreijer New Member

Thanks Received:

Definitely. Since this is a server in production, I’ve obfuscated some of the IPs, etc.

First off, here’s the ifconfig. Our setup consists of a private (ix0) and a public nic (ix1) and an ip tunnel (gif0), which is what we use in ipfw to forward incoming packets to our internal boxes:


The basic ruleset looks like this. One-pass is off so that packets are reinjected after going through NAT’ing and pipes:


‘ipfw nat show config’ yields:


And finally, here are the horrifying ping times (furthermore, all outgoing TCP traffic originating from this box, such as wget or pkg_add, time out. I’ve managed to get an outgoing telnet working, but it’s horrible slow and takes a while to establish):


It’s worth mentioning that when I switch back to using natd and divert in the ruleset (which really only changes the nat portions and everything else stays the same), the ping time drops to ~300ms, which is a big difference for simply “using” natd even when the ICMP packets aren’t supposed to be going through NAT’ing whatsoever. The ~300ms ping time is still way too high, though, since our other boxes have a ping time to Google of ~0.300ms…

Any ideas?



Anonymous Guest

It looks to me as if TSO is enabled on your adapter ix0.The manual of ipfw(8)() states in the section BUGS: 




Some observations about the firewall rules:

Your ipfw rule 0003 refers to gif1, however, gif1 is not present in your ifconfig(8)() listing. You mentioned explicitly gif0 in your message, and you might want to check your actual rule set.

Also in my case, the check-state rule does always show package/byte counts of zero. So, I assume this is normal.

In my opinion, your rule 200 should become a lower index and go before rule 100, and I would append setup keep-state to it, so most probably rule 201 could be omitted.

I don’t think that rule 100 can be for testing only. In my setup a similar rule lets all the clients connecting to the internet, and with out that, my clients would be effectively offline. In this respect, I am missing a corresponding udp rule. On the other hand, I do have nothing like your icmp rule 110, and pinging from behind the NAT does work anyway.


dreijer New Member

Thanks Received:

Yeah, I already got rid of that, which fixed some intermittent TCP connection issues I had when routing traffic through the FreeBSD box to our internal boxes. It had no effect whatsoever on the ping times or TCP traffic originating from the FreeBSD box itself.

That’s because I obfuscated the ruleset and removed rules that weren’t relevant to illustrate the setup. The tunnels are very much working, so ignore any typos like that. :)

I’ve explicitly avoided using dynamic rules for the allowed incoming traffic because I don’t want DDoS attacks (which we’ve been hit by recently) to take up gobs of system memory.

Sure, it’s “necessary”, but I could lock it down even more and only allow certain protocols, like pkg_add, ssh, etc.


Anonymous Guest

Perhaps, I cannot be of more help here than posting a working ruleset, which is structurally similar to yours, but of course must be somehow different. By replacing the 1723 redirection by a 443 one, and by removing the L2TP/IPsec stuff, this would almost match your setup.bridge0 is my internal and ue0 my external interface. 





One final observation, your rule 400 corresponds more AND less to my rules 9998/9999. Your rule takes LESS space, but is MORE restrictive, and I am not sure whether your rule 110 which takes care only for the out direction would fix this.



теперь результат проверки  –

несколько картинок



пинги с 2-х сторон только без флуда – поставить если винда -w 500 -s 15

это нужно чтобы соединения не сбрасывались по неактивности – если правильно прописаны маршруты то соединения сами устанавливаются.

.. я показываю только инструмент – вот топор им надо рубить дрова или строить дом, а не вскрывать дверь соседу.


можно не настраивать на виндоуз сервер если он не нужен еще для чего – например склад на mssql .
диски можно расшарить с помощью Samba а MPD ище добавлю и Racoon ipsec router – ipsec tools
весь маршрутизатор можно сделать на FreeBSD и оно надежнее – мыши с видюхами не дохнут.

что то сломалось и больше не работает ? читать только заново а может что и поменялось еще

исправлено 1 сентября 2017
Фряха 11 stable ядро на роутере собирал но из за oss virtualbox а для роутера не нужно пересобирать. kldload ipfw ipfw_nat libalias а divert не надо.
Винда 2012R2 и 2016 сборка сервера и с обновлениями и без работает.
Работает как на картинках L2TP PPTP в любой комбинации, с сертификатами не настраивал – там надо dns полные доменные имена прописать хотя бы фирма.локалка англ буквами, перевыпустить сертификаты самоподписаные, или проверить что они есть, нажав в роутере посмотреть кнопку, для iis и для router должен быть тот же сертификат, если сделать второй то служба не запустится, имена компов должны полностью совпадать и зона dns тоже (а вообще советуют AD поднимать только этого нехватало server essential ). Подключившись по полному имени через mstsc (а dns в свойствах соединения на первом месте и вообще есть? а провайдерские в него как дополнительные прописаны recursive + root hint? ) надо установить сертификат второго компа в доверенные корневые центры сертификации на локальном компьютере и еще в доверенные издатели, имя dns совпадает,не сбилось? Вообще то это описание подмены dns а надо только чтобы имена совпадали, если у компьютеров постоянный адрес в Интернете то поможет например или если внешний но меняется то а вот во внутреннюю сеть снаружи не подключиться.    И еще галочка что проверять назначение сертификата, если он выпущен не для домена то будет ругань. А выше написано как сделать без этих заморочек.

.. добавил сертификаты где надо от


FreeBSD  server desktop + wine + internet workstation virus free _ bitminer Cryptonight virtualbox + windows + Linux ubuntu — one Xeon processor ” 29xx 48 284G 700ssd _2x3TB hdd”  .

добавил еще пример конфигурации (найдено..) а на 13 версии FreeBSD что то уточнять надо – поменялось.

на pfsense переход – та же freebsd только поудобнее настойка -взял из нее только Openvpn там где 2 сервера по общему ключу соединяются – это совмещается с маршрутизатором ipfw                      

How to Install Midnight Commander MC on PfSense 2.4.5

snippets, Tools / freebsd, mc, pfsense / By Vadim.t0rik 1.7 (7)

Sometimes you want to install some package that FreeBSD has, but pfSense does not (for example: mc).

Connect via SSH to the server, enter:

and we read the abuse, from which it follows that the repository is not connected

The developers of the distribution believe that installing from the FreeBSD repositories can harm the system in one way or another (for example, pull in inappropriate versions of packages as dependencies).
But if you continue to persist in your desire (like me, for example), then you can do the following:

First line:

change to:

Save file, then run:

The install MC:

and use:

How to Install Midnight Commander MC on PfSense 2.4.5

#SHELL=/bin/csh mc

Similar Posts:


How useful was this post?

Related Images: