LINUX.ORG.RU
ФорумAdmin

Помогите пожалуйста с iptables (dd-wrt, vpn)


0

1

Есть рутер с dd-wrt, рутер подсоединяется к strongvpn.com.
За рутером стоит виндовозный сервер, который ходит через strongvpn.com в интернет.
С форумов стронгвпн я взял фаерволл который настраивает всё нужное.
Всё нормально, рутер грузит скрипт, создаёт ppp0 и делает его дефолтным шлюзом.
Но мне надо что-бы я мог подсоединяться удалённо к этому рутеру, используя адрес провайдера (те. не strongvpn) и по видимому из за того что дефолтный шлюз меняется я это сделать не смогу.
Я без проблем подсоединяюсь к рутеру из локалки.
Могу подсоедениться через ип провайдера до того как поднято pptp соединение. Но как только pptp поднимается то до свидания. :)
Если путано, то скажите, постараюсь объяснить понятнее.
Рутинг и фаервол прилагается.

Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
208.xx.xxx.1 * 255.255.255.255 UH 0 0 0 ppp0
192.168.2.1 * 255.255.255.255 UH 0 0 0 eth0
204.xx.xxx.xxx 192.168.2.1 255.255.255.255 UGH 0 0 0 eth0
192.168.128.0 * 255.255.255.0 U 0 0 0 br0
192.168.2.0 * 255.255.255.0 U 0 0 0 eth0
169.254.0.0 * 255.255.0.0 U 0 0 0 br0
127.0.0.0 * 255.0.0.0 U 0 0 0 lo
default * 0.0.0.0 U 0 0 0 ppp0

echo «sleep 40» > /tmp/firewall_script.sh;
echo «gw=\`ip route ls to 0/0|cut -d ' ' -f3\`» >> /tmp/firewall_script.sh;
echo «vpnsrv=\$(nvram get pptpd_client_srvip)» >> /tmp/firewall_script.sh;
echo «dynvpnip=\$(ifconfig ppp0 | grep 'inet addr' | grep -v '127.0.0.1'| awk '{print $2}' | cut -d: -f2)» >> /tmp/firewall_script.sh;
echo «vpnip=\$(nvram get pptpd_client_srvsub)» >> /tmp/firewall_script.sh;

echo «route add -host \$vpnsrv gw \$gw» >> /tmp/firewall_script.sh;
echo «route del default» >> /tmp/firewall_script.sh;
echo «route add default dev ppp0» >> /tmp/firewall_script.sh;

echo «iptables -t nat -I POSTROUTING -o ppp0 -j SNAT --to-source \$dynvpnip» >> /tmp/firewall_script.sh;
echo «for i in \`echo \$(nvram get forward_spec)|sed 's=\ =\n=g'|grep on|grep tcp\`; do» >> /tmp/firewall_script.sh;
echo «iptables -t nat -A PREROUTING -p tcp -i ppp0 -d \$dynvpnip --dport \`echo \$i|cut -d : -f 4|cut -d \> -f 1\` -j DNAT --to \`echo \$i|cut -d \> -f 2\`» >> /tmp/firewall_script.sh;
echo «iptables -A FORWARD -p tcp -i ppp0 -d \`echo \$i|cut -d \> -f 2|cut -d : -f 1\` --dport \`echo \$i|cut -d : -f 4|cut -d \> -f 1\` -j ACCEPT» >> /tmp/firewall_script.sh;
echo «done» >> /tmp/firewall_script.sh;
echo «for i in \`echo \$(nvram get forward_spec)|sed 's=\ =\n=g'|grep on|grep udp\`; do» >> /tmp/firewall_script.sh;
echo «iptables -t nat -A PREROUTING -p udp -i ppp0 -d \$dynvpnip --dport \`echo \$i|cut -d : -f 4|cut -d \> -f 1\` -j DNAT --to \`echo \$i|cut -d \> -f 2\`» >> /tmp/firewall_script.sh;
echo «iptables -A FORWARD -p udp -i ppp0 -d \`echo \$i|cut -d \> -f 2|cut -d : -f 1\` --dport \`echo \$i|cut -d : -f 4|cut -d \> -f 1\` -j ACCEPT» >> /tmp/firewall_script.sh;
echo «done» >> /tmp/firewall_script.sh;

sh /tmp/firewall_script.sh &


Ответ на: комментарий от anykey_mlya

Нет. В данный момент ип динамический.

В общем подключение надо так:
Наружу:
сервер->рутер->впн->интернет
Вовнутрь:
моя машина(динамический)->isp(статик)->рутер->сервер

На самом деле надо что-бы подключаться к рутеру и серверу я мог только по определённым портам. Те. мне надо подключаться к самому рутеру по ssh и к серверу по rdp. Причём rdp перенапрявляется с порта 52000 на 3389.

Я плохо ориентируюсь в рутингах и фаерволле, потому мучаюсь. Не понятно мне надо разбираться только с рутингом, только с iptables или и с тем и с другим.

Можно ли сделать так что дефолт шлюз не ppp0 а рутер, трафик с сервера направляется на ppp0 а К серверу идёт через eth0.

conrod ()

И ещё,
на сервере две сетевухи.
Может сделать два гейтвея на каждую сетевуху свой?
Только как тогда винде сказать что в интернету ходить надо только через одну, но и вторая может коннектится.

conrod ()

Ещё,
у меня сейчас так сделано:
isp router/modem->router1->router2->server
(но позже будет isp->router->server)
Сделан проброс нужных портов через три рутера. С рутера1 я без проблем подключаюсь к серверу.
А если пытаюсь подключиться так же через внешний ип, то не пускает.
При этом с внешнего ип без проблем подключаюсь по ssh на рутер1, те. порты все открыты.
Если не запускать тот фаерволл, то точно так же я могу через внешний ип подрубиться к серверу.

Моя логика такая что когда я подключаюсь снаружи то в пакете ип внешний и его фаерволл (router2) режет. А когда с рутера1 то ип внутренний и его не режет потому-что ип рутер1 прописан в рутинге рутера2.
Может есть какой-то вариант с помощью iptables изменить адрес входящего пакета на внутренний?



conrod ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.