Ярлыки

Memories ( 25 ) Unix ( 14 ) FreeBSD ( 8 ) www ( 4 ) Scripts ( 3 ) GEOM ( 2 ) PART ( 2 ) smtp ( 2 ) Cacti ( 1 ) Jabber ( 1 ) KVM ( 1 ) Kohana ( 1 ) RAID ( 1 ) Sip ( 1 ) Ubuntu ( 1 ) Zyxel ( 1 ) nginx ( 1 ) php-fpm ( 1 ) portwfd ( 1 ) rewrite ( 1 ) security ( 1 )

Поиск по этому блогу

вторник, 9 ноября 2010 г.

FreeBSD + portfwd + rc-скрипт

Потребовалось однажды сделать на одном серваке с FreeBSD port mapping, причем везде участвовали реальные IP адреса и везде были задействованы одни и те же интерфейсы. То есть  трасса проходила так: inet -> (eth0)Real-IP1,2,3.... -> serv1 -> (eth0)Real-IP1 -> inet -> (eth0)Real-IP4 -> serv2 и обратно в случае firewall кроме редиректа пришлось бы еще городить прямой и обратный NAT. NAT там не был настроен, возиться с подъёмом natd или pf не хотелось, я решил поставить portfwd из портов. Хотя portfwd и работает в режиме демона, но она почему-то не ставит rc-скрипт для запуска себя самой.



rc-скрипт для запуска:

#!/bin/sh
#


# PROVIDE: portfwd
# REQUIRE: LOGIN
# KEYWORD: shutdown


. /etc/rc.subr


name="portfwd"
rcvar=`set_rcvar`
command="/usr/local/sbin/$name"
start_cmd="${name}_start"


load_rc_config $name


eval "${rcvar}=\${${rcvar}:-'NO'}"
conf=${conf:-"/usr/local/etc/portfwd.conf"}
required_files=$conf


portfwd_start()
{
info "Starting $name"
$command -c $conf
}


portfwd_stop()
{
info "Stoping $name"
killall portfwd
}




run_rc_command "$1"




run_rc_command "$1"

Скрипт проверяет наличие переменной portfwd_enable="YES" в /etc/rc.conf, а также можно указать, где брать конфигурационный файл, задав переменную portfwd_conf. По умолчанию предполагается, что конфигурационный файл лежит в /usr/local/etc/portfwd.cfg. Сам скрипт нужно положить, соответственно, в /usr/local/etc/rc.d/

Также полезное из этой оперы:
/usr/ports/net/jumpgate - примитивно но зато очень просто см. man jumpgate
/usr/ports/net/rinetd (под сравнительно небольшой нагрузкой выедает 100% CPU и отказывается работать, причины мне не известны)

Комментариев нет :

Отправить комментарий