Значится так, все описанное здесь было сделано по просьбе моего друга известного здесь как Polll (вот его проблема http://wl500g.info/showthread.php?t=8710).
Задача звучала так:
на работе закрыты все порты наружу (http идеть через проксю) кроме TCP 5190, нужно получить полноценный инет. Дома стоит WL500gP с реальным IP на WAN, но без подключенного харда или флэшки.
Так как он в linux`e полный ноль, то пришлось написать скрипт который сделает все сам. Сразу оговорюсь что скрипт писался исходя из условий что в WL500gP никто по телнету на "лазил грязными ногами" была только залита прошивка Олега и настроено все через веб морду. Соответственно считалось по умолчанию что скрипт ничего настроенного (до его запуска) через телнет не сломает (если что-то делали ранее нужно закоментировать соответствующие строки).
Расписано все так чтобы было понятно даже новичку. И так начнем ...
Для начала нужно скачать и установить на винду openvpn http://openvpn.se/download.html
openvpn-2.0.9-gui-1.0.3-install.exe.
После установки переименовываем новое сетевое соединение в "tun0".
Генерим ключик:
cd C:\Program Files\OpenVPN\config
openvpn --genkey --secret static.key
С помощью блокнота создаем в директории C:\Program Files\OpenVPN\config файл client.ovpn следующего содержания:
remote myhost
dev tun0
port 5190
proto tcp-client
ifconfig 10.8.0.2 10.8.0.1
secret static.key
redirect-gateway
где "muhost" IP-адрес WAN роутера, порт 5190 выбран изза условия (можно поставить любой выше 1024)
С виндой мы разобрались теперь займемся роутером.
Нужно любым способом перебросить файлик ключа static.key на роутер в директорию /tmp/local. Это можно
сделать несколькими способами, вот два самых простых:
1) Временно подключить жесткий диск или флэшку к роутеру и по фтп скинуть на него файлик, после чего в
телнете выполнить команду
cp /tmp/harddisk/ftp_pub/static.key /tmp/local
2) Временно выложить файлик где нить в инете и в телнете выполнить команды
cd /tmp/local
wget http://адрес_где_лежит_файл/static.key
Все будем ставить в встроенный флеш.
Вот файл скрипта inst_openvpn
#!/bin/sh
# Создаем директорию куда все будем ставить
mkdir /tmp/local/opt
# Монтируем ее в /opt
mount /tmp/local/opt /opt
# Обновляем список доступных для установки пакетов
ipkg.sh update
# Устанавливаем установщик пакетов ipkg
ipkg.sh install ipkg
# Перенастраиваем ipkg на нужный нам репозитарий пакетов
echo "src unslung http://ipkg.nslu2-linux.org/feeds/optware/oleg/cross/stable" > /opt/etc/ipkg.conf
echo "dest root /" >> /opt/etc/ipkg.conf
# Обновляем список доступных для установки пакетов
ipkg update
# Последовательно ставим необходимые для выполнения нащей задачи пакеты
ipkg install uclibc-opt
ipkg install openssl
ipkg install lzo
ipkg -force-depends install openvpn
# Создаем виртуальный сетевой интерфейс
mkdir /dev/net
mknod /dev/net/tun c 10 200
# Создаем файл конфигурации openvpn сервера
echo "dev tun0" > /opt/etc/openvpn/server.conf
echo "port 5190" >> /opt/etc/openvpn/server.conf
echo "proto tcp-server" >> /opt/etc/openvpn/server.conf
echo "ifconfig 10.8.0.1 10.8.0.2" >> /opt/etc/openvpn/server.conf
echo "secret static.key" >> /opt/etc/openvpn/server.conf
# Создаем директорию для пользовательских скриптов
mkdir /usr/local/sbin
# Создаем в ней файл post-boot и прописываем в него
# монтирование /opt и запуск openvpn сервера после загрузки роутера
echo "#!/bin/sh" > /usr/local/sbin/post-boot
echo "mount /tmp/local/opt /opt" >> /usr/local/sbin/post-boot
echo "/opt/etc/init.d/S24openvpn" >> /usr/local/sbin/post-boot
# Делаем файл скрипта исполняемым
chmod +x /usr/local/sbin/post-boot
# Создаем в ней файл post-firewall и прописываем в него
# нужные нам правила файрвола для работы сервера
echo "#!/bin/sh" > /usr/local/sbin/post-firewall
echo "iptables -D INPUT -j DROP" >> /usr/local/sbin/post-firewall
echo "iptables -I INPUT -p tcp --dport 5190 -j ACCEPT" >> /usr/local/sbin/post-firewall
echo "iptables -t nat -I PREROUTING -i eth1 -p tcp --dport 5190 -j DNAT --to-destination \$4:5190" >> /usr/local/sbin/post-firewall
echo "iptables -A INPUT -j DROP" >> /usr/local/sbin/post-firewall
echo "iptables -I INPUT -i tun0 -j ACCEPT" >> /usr/local/sbin/post-firewall
echo "iptables -I FORWARD -i tun0 -j ACCEPT" >> /usr/local/sbin/post-firewall
echo "iptables -I FORWARD -o tun0 -j ACCEPT" >> /usr/local/sbin/post-firewall
echo "iptables -I OUTPUT -o tun0 -j ACCEPT" >> /usr/local/sbin/post-firewall
# Делаем файл скрипта исполняемым
chmod +x /usr/local/sbin/post-firewall
# Создаем файл запуска openvpn сервера
echo "#!/bin/sh" > /opt/etc/init.d/S24openvpn
echo 'if [ -n "`pidof openvpn`" ]; then' >> /opt/etc/init.d/S24openvpn
echo "/bin/killall openvpn 2>/dev/null" >> /opt/etc/init.d/S24openvpn
echo "fi" >> /opt/etc/init.d/S24openvpn
echo "/sbin/insmod tun" >> /opt/etc/init.d/S24openvpn
echo "echo 1 > /proc/sys/net/ipv4/ip_forward" >> /opt/etc/init.d/S24openvpn
echo "/opt/sbin/openvpn --cd /opt/etc/openvpn --daemon --log-append /var/log/openvpn.log --config server.conf" >> /opt/etc/init.d/S24openvpn
# Делаем файл скрипта исполняемым
chmod +x /opt/etc/init.d/S24openvpn
# Говорим роутеру что мы хотим сохранять во флэш наши скрипты
echo "/usr/local/sbin/post-firewall" > /usr/local/.files
echo "/usr/local/sbin/post-boot" > /usr/local/.files
# перемещаем ключ в нужное место
mv /tmp/local/static.key /opt/etc/openvpn
# Сохраняем все во флэш и перегружаем роутер
flashfs save
flashfs commit
flashfs enable
reboot
После ребута роутера пробуем законектится с винды ... Если удачно то весь интернет трафик теперь пойдет через этот тунель.
Если нет желания вводить команды руками можно взять готовый скрипт (см. вложение) переместить его на роутер в /tm/local также как файл ключа сделать исполняемым
chmod +x /tmp/local/inst_openvpn
и запустить его
/tmp/local/inst_openvpn
Удачи всем ...