Я обычно для этих целей использую утилиту — rinetd.
Во-первых проще, во-вторых утилита — отдельный демон и работает шустрее iptables. Минус в однопоточности. DDoS в 100к pps такой штукой отмаршрутизировать ещё можно, но дальше начнутся проблемы. С другой стороны, там, где летает 100к пакетов в секунду и iptables будет задумчиво перекидывать пакеты (хоть и в несколько потоков).
Через rinetd нельзя пробросить FTP, не пытайтесь. (если вдруг, знаете как это сделать, напишите мне, буду благодарен)
И так, все делается достаточно просто.
Задача.
Рассмотрим одну из самых частых задач, предоставление ssh доступа к виртуальной машине или контейнеру.
У нас есть:
1) ip адрес основной машины (на которой установлен proxmox) 8.8.8.8.
2) контейнер 10.0.0.1 на него нужно пробросить ssh.
Решение.
Ставим сам rinetd:
apt-get update
apt-get install rinetd
Открываем и правим конфиг:
nano /etc/rinetd.conf
И пишем туда следующее:
# разрешим всем ходить по редиректам (и вообще цепляться к портам):
allow *.*.*.*
# перенаправление ssh трафика с 8.8.8.8 на 10.0.0.1:
8.8.8.8 223 10.0.0.1 22
На всякий случай поясню:
- 1й столбик — IP, который слушает rinetd
- 2й столбик — порт, который слушает rinetd
- 3й столбик — IP, на который перенаправляем трафик
- 4й столбик — порт, на который перенаправляем трафик с порта из второго столбика.
Правил может быть сколько угодно (65к я не вбивал, но, думаю, справится).
В первый столбик нельзя вписывать IP, не принадлежащий машине (не поднятый на интерфейсах), иначе rinted не запустится. Точнее запустится, но будет дропать коннекты и спамить в логи.
Лог пишется в /var/log/rinetd.log, посматривайте сколько он места занимает — может расти достаточно быстро, если есть какие-либо проблемы.
После правки конфига следует перезапускать rinetd командой:
/etc/init.d/rinetd restart