В основном существует два способа переадресации портов: Первый - это то, что сейчас делает ваш pfSense («полный» NAT, conntrack в Linux): когда новое соединение инициируется клиентом, pfSense создает новое сопоставление в своей таблице NAT, заменяет исходный адрес своим собственным, при необходимости меняет исходный порт и отправляет измененный пакет на ваш веб-сервер. Ваш веб-сервер автоматически отправит свои ответы машине pfSense, которая затем может снова поменять поля местами и отправить пакет клиенту. Преимущество этого подхода в том, что вашему веб-серверу не нужно об этом знать, он просто работает. Насколько я помню, вы можете отключить это в pfSense, если переключите режим NAT на «AON» и отключите NAT для (webserverip, targetport).
Ваш потребительский маршрутизатор выполнил простую переадресацию портов (DNAT в Linux): по прибытии пакета он просто поменял местами адрес назначения и отправил пакет на ваш веб-сервер. Поскольку пакет теперь по-прежнему имеет реальный адрес отправителя, веб-сервер может видеть реальный адрес клиента. К сожалению, когда он отправляет ответ, он помещает свой собственный (частный) адрес в поле источника, которое маршрутизатор должен заменить на ваш общедоступный IP-адрес на выходе (SNAT в Linux). Поскольку веб-сервер напрямую адресует пакет клиенту, маршрутизатор может сделать это, только если он также является шлюзом по умолчанию! (или когда вы настраиваете довольно забавные политики маршрутизации на своем веб-сервере)
Вы уверены, что вам нужна автоматическая перекомпиляция ядра? Если вы используете репозитории Ubuntu для загрузки обновлений безопасности, компилировать их нет необходимости. В противном случае этот момент отсутствует в вашем вопросе.
Есть несколько способов автоматически скомпилировать ядро. Например, посмотрите эту статью
Я добавляю цитату со страницы:
# Automated Kernel Recompilation By Avinash Shankar
# Note: This was done under RH-7.3 so plz verify the paths
# Warning: Please run the Script under Xwindows
#going to kernel sources directory:
echo Entering Kernel Source Directory................
cd /usr/src/linux-2.4/
#Cleaning dep files and objs:
echo Cleaning up Junk files..................
make clean
#Configuring your New Kernel:
echo Entering Graphical kernel config.....................
make xconfig
#Making the dependencies files:
echo Making the dependecies ..................
make dep
#Backing up old module files
echo All your module files and system.map files backed up ................
mv /lib/modules/2.4.18-3/modules.dep modules.dep.old
mv /usr/src/linux-2.4/System.map System.map.old
#Make a compressed kernel:
echo Compressing the kernel image ..............................................
make bzImage
#Copy the Image to /boot directory
echo Copying the bzImage to /boot Directory......................................................
cp /usr/src/linux-2.4/arch/i386/boot/bzImage /boot
#Make the modules :
echo Compiling the Modules ...............................
make modules
#Make the Installable modules used by the new kernel
echo Making the modules executable ...................................
make modules_install
#copy the System.map file to /boot
echo Copying System.map file to /boot ....................................
cp /usr/src/linux-2.4/System.map /boot
echo Thats it you are finished ! Cool now edit the lilo.conf or your grub.conf file
echo located in the /boot directory. Copy the kernel entries and replace kernel with
echo the bzImage file and the initrd entry with System.map
-----------------------------------------------------------------------------------------------
Также в наши дни Live Kernel Patching - это то, что облегчит вашу жизнь. К сожалению, это справедливо только для Ubuntu 16.04
. С момента выпуска ядра Linux 4.0 около 18 месяцев назад пользователи могли исправлять и обновлять свои пакеты ядра без перезагрузки.