Есть ADSL канал. Для соединения с VPN использую pptpclient. Из шела даю команду:
/usr/local/sbin/pptp 10.0.0.138 vpn &
соединение устанавливается, создается тунел tun0. Все работает.
Также использую ipfw + natd для транляции адресов, но дело в том, что весь траффик идет после соединения через tun0 и NAT необходимо поднимать именно на этом интерфейсе и ipfw правила писать соответствующие. Отсюда родился скрипт /usr/local/etc/rc.d/firewall.sh:
....
/usr/local/sbin/pptp 10.0.0.138 vpn &
sleep 15 # 15 секунд ждем чтоб образовался тунель и соединение
natd -n tun0
ipfw add divert natd any from any to any via tun0 # это все примерно, чтоб все ходило
....
После выполнения /usr/local/etc/rc.d/firewall.sh - устанавливается соединения, поднимается NAT и все работает великолепно. Но это при запуске из шела, когда я залогонился.
При перезапуске машины - скрипт выполняется и получается следующее. pptp устанавливает соединение, запускается NAT, и т.п. и после завершения работы скрипта соединение рвется. Лог pptp:
ug 20 11:18:43 server ppp[431]: tun0: IPCP: IPADDR[6] changing address: 0.0.0.0 --> 62.141.73.30
Aug 20 11:18:43 server ppp[431]: tun0: IPCP: deflink: SendConfigReq(3) state = Ack-Sent
Aug 20 11:18:43 server ppp[431]: tun0: IPCP: IPADDR[6] 62.141.73.30
Aug 20 11:18:44 server ppp[431]: tun0: IPCP: deflink: RecvConfigAck(3) state = Ack-Sent
Aug 20 11:18:44 server ppp[431]: tun0: IPCP: IPADDR[6] 62.141.73.30
Aug 20 11:18:44 server ppp[431]: tun0: IPCP: deflink: State change Ack-Sent --> Opened
Aug 20 11:18:44 server ppp[431]: tun0: IPCP: deflink: LayerUp.
Aug 20 11:18:44 server ppp[431]: tun0: IPCP: myaddr 62.141.73.30 hisaddr = 194.85.128.252
Aug 20 11:18:48 server ppp[431]: tun0: Phase: Signal 1, terminate.
Aug 20 11:18:48 server ppp[431]: tun0: IPCP: deflink: LayerDown: 62.141.73.30
Aug 20 11:18:48 server ppp[431]: tun0: IPCP: deflink: SendTerminateReq(4) state = Opened
Aug 20 11:18:48 server ppp[431]: tun0: IPCP: deflink: State change Opened --> Closing
Aug 20 11:18:48 server ppp[431]: tun0: Warning: ipv4_Input: IPCP not open - packet dropped
Aug 20 11:18:48 server ppp[431]: tun0: IPCP: deflink: RecvTerminateAck(4) state = Closing
Aug 20 11:18:48 server ppp[431]: tun0: IPCP: deflink:
Можно заметить что сигнал на отключение приходит через 16 секунд (15 - sleep + 1 сек natd+ipfw), тоесть скрипт закончил - pptp убили. При этом natd остается висеть замечательно.
В процессе работы этого скрипта при загрузке системы, можно видеть в процессах (ps aux):
root 435 0.0 3.0 1268 888 con S+ 11:42AM 0:00.01 /usr/local/sbin/pptp 10.0.0.138 vpn
root 436 0.1 2.9 1268 860 con S+ 11:42AM 0:00.05 /usr/local/sbin/pptp 10.0.0.138 vpn
Отличия от процесса natd в следующем. В качестве TT (контролир терминал) - стоит con, у natd - ??, в качестве STAT - S+, natd - Ss.
Вообщем скажите мож я чего не правильно пускаю? Или что вообще происходит - почему он дохнет (pptp)?