LINUX.ORG.RU
решено ФорумAdmin

Помагите настроить правильно маскарадинг

 ,


0

1

если мне надо на интерфейсе настроить маскарадинг, то я делаю так iptables -t nat -A POSTROUTING -o eth3 -j MASQUERADE

И все работает, но трафик идет через дефолтный гетвей, а мне надо чтобы шел через интерфейс ppp0

Как мне сделать так, чтобы по подключению к eth3 роутился и маскарадился траффик на ppp0. При этом дефотный гетвей оставался такой же как сейчас. т.е. сама машина использовала eth3

Вот мои подробности сети.

eth3      Link encap:Ethernet  HWaddr 6c:f0:49:d6:69:27  
          inet addr:192.168.1.105  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::6ef0:49ff:fed6:6927/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:47463 errors:0 dropped:0 overruns:0 frame:0
          TX packets:67061 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:7988488 (7.6 MiB)  TX bytes:52776291 (50.3 MiB)
          Interrupt:41 Base address:0xc000 

eth4      Link encap:Ethernet  HWaddr 00:1e:10:1f:00:01  
          inet6 addr: fe80::21e:10ff:fe1f:1/64 Scope:Link
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:5 errors:0 dropped:0 overruns:0 frame:0
          TX packets:139 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:1502 (1.4 KiB)  TX bytes:28724 (28.0 KiB)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:58 errors:0 dropped:0 overruns:0 frame:0
          TX packets:58 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:4108 (4.0 KiB)  TX bytes:4108 (4.0 KiB)

ppp0      Link encap:Point-to-Point Protocol  
          inet addr:10.188.149.24  P-t-P:10.64.64.64  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:20 errors:0 dropped:0 overruns:0 frame:0
          TX packets:20 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:3 
          RX bytes:1346 (1.3 KiB)  TX bytes:1369 (1.3 KiB)

# роутинг

default via 192.168.1.1 dev eth3  proto static 
10.64.64.64 dev ppp0  proto kernel  scope link  src 10.188.149.24 
192.168.1.0/24 dev eth3  proto kernel  scope link  src 192.168.1.105 




Последнее исправление: spiritkhl (всего исправлений: 1)

все тоже самое, только тебе надо изменить пареметр -o eth3 на -o ppp0

но само по себе ничего не даст, надо еще вот что сделать

route add default gw x.x.x.x dev ppp0 xxxx замени на ip реального роутера

route del default gw x.x.x.x dev eth3

тогда трафик пойдет по новому дефолтному маршруту, а после принятия решения о маршрутизации, весь трафик который принято отправить через ppp0 еще и маскарадится будет.

IvanR ★★★
()
Ответ на: комментарий от spiritkhl

тогда надо сделать:

iptables -t mangle -A PREROUTING --source ${диапазон адресов, с клиентов} -j MARK --set-mark 123

ip rule add fwmark 123 table ppprouter
ip route add default via 10.188.149.1 dev ppp0 table ppprouter
ip route flush cache

не уверен, но попробуй, может и сработает

только в iptables укажи диапазон источников правильно, можно в таком виде: x.x.x.x/xx или в таком x.x.x.x/255.255.255.0

в общем вот:

http://www.opennet.ru/docs/RUS/LARTC/c1430.html

IvanR ★★★
()
Последнее исправление: IvanR (всего исправлений: 1)
Ответ на: комментарий от IvanR
root@debian:/home/spirit# ip rule add fwmark 123 table ppprouter
Error: argument "ppprouter" is wrong: invalid table ID
spiritkhl
() автор топика
Ответ на: комментарий от IvanR

Попробовал, ошибок нет, но не идут пакеты. Вот мои последовательности действий:

root@debian:/home/spirit# ip route list table local
local 10.189.88.83 dev ppp0  proto kernel  scope host  src 10.189.88.83 
broadcast 10.189.88.83 dev ppp0  proto kernel  scope link  src 10.189.88.83 
broadcast 127.0.0.0 dev lo  proto kernel  scope link  src 127.0.0.1 
local 127.0.0.0/8 dev lo  proto kernel  scope host  src 127.0.0.1 
local 127.0.0.1 dev lo  proto kernel  scope host  src 127.0.0.1 
broadcast 127.255.255.255 dev lo  proto kernel  scope link  src 127.0.0.1 
broadcast 192.168.1.0 dev eth3  proto kernel  scope link  src 192.168.1.105 
local 192.168.1.105 dev eth3  proto kernel  scope host  src 192.168.1.105 
broadcast 192.168.1.255 dev eth3  proto kernel  scope link  src 192.168.1.105 

root@debian:/home/spirit# ip route list table main
default via 192.168.1.1 dev eth3  proto static 
10.64.64.64 dev ppp0  proto kernel  scope link  src 10.189.88.83 
192.168.1.0/24 dev eth3  proto kernel  scope link  src 192.168.1.105 

root@debian:/home/spirit# echo 200 Yana >> /etc/iproute2/rt_tables
root@debian:/home/spirit# ip rule add from 192.168.1.117 table Yana
root@debian:/home/spirit# ip rule ls
0:	from all lookup local 
32765:	from 192.168.1.117 lookup Yana 
32766:	from all lookup main 
32767:	from all lookup default 

root@debian:/home/spirit# ip route add default via 10.189.88.83 dev ppp0 table Yana
root@debian:/home/spirit# ip route flush cache 

192.168.1.117 - ip устройствo которое должно получать инет через ppp0.

spiritkhl
() автор топика
Ответ на: комментарий от spiritkhl

по идее должно работать.

установите wireshark и смотрите пакеты на каждом интерфейсе

echo 200 yana >> /etc/iproute2/rt_tables
ip rule add from ${YANA_IP_ADDRESS} table yana

ip route add default via  ${PPP_DEFAUL_GW} dev ppp0 table Yana

ip route flush cache

echo 1 > /proc/sys/net/ipv4/ip_forward

iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

сделайте все так и проверяйте сниффером wireshark

IvanR ★★★
()
Последнее исправление: IvanR (всего исправлений: 1)
Ответ на: комментарий от IvanR

А я раз за то что на этом форуме остались люди которые могут помочь, а не просто разводить троллинг

spiritkhl
() автор топика
Ответ на: комментарий от IvanR

У меня еще один небольшой вопрос.

Вот мы добавили дефолтный роут

ip route add default via 10.64.64.64 dev ppp0 table Yana

А как его теперь удалить? Не получается сообразить. У меня бывает просто меняется гетвей от провайдера при падении соединения, и мне надо удалять эти правила, и создавать новые

spiritkhl
() автор топика
Ответ на: комментарий от spiritkhl

Все, сам сообразил.

ip route del default table Yana

spiritkhl
() автор топика
Ответ на: комментарий от IvanR

думаю, что можно просто делать так:

ip rule del .....

ip route del .....

ip route flush cache

команду надо указывать полностью, затем добавить правило iptables

и оставлять единственный default gw через ethX

таблицу яна можно не трогать, так как она не будет иметь значения, если мы сделали ip rule del ...

вообще я бы скрипт написал, который следит за доступностью интернета через ppp и если интернет падает, то удаляет всне ненужные правила и маршруты и удаляет все ненужные правила iptables (хотя его можно не трогать)

а как интернет появился, можно снова добавлять все правила и маршруты.

я писал нечто подобное просто для 2-х интерфейсов, получилось монстроподобно, но работает))))

вот он: http://pastebin.com/c4yRXMbp

IvanR ★★★
()
Последнее исправление: IvanR (всего исправлений: 1)
Ответ на: комментарий от IvanR

Я использую wvdial.

Когда поднимается PPP-соединение, pppd запускат скрипт /etc/ppp/ip-up, а когда соединение разрывается - то /etc/ppp/ip-down. Также для удобства есть две директории: /etc/ppp/ip-up.d/ и /etc/ppp/ip-down.d/ скрипты из которых также запускаются в момент создания и разрыва PPP-соединения. Этот механизм удобно использовать для обмена данными, отправки/приема почты, входа в VPN и т.д.

spiritkhl
() автор топика
Ответ на: комментарий от spiritkhl

ну значит можно в них добавить команды создания маршрута и правила

а при остановки добавить команды удаления правила и машрута.

/etc/iproute2/... лучше не трогать вообще.

в общем обдумайте как следует, какие бывают состояния и в какой последовательности, затем обдумайте как следует, какие команды должны выполнятся при переходе из одного состояния в другое и отредактируйте в связи с этим ваши скрипты, потом протестируйте по всем ситуациям и по всем переходам из одного состояния в другое и в каждом состоянии смотрите, что у вас просиходит с роутингом.

В результате вы получите автоматизированную систему))))

IvanR ★★★
()
Ответ на: комментарий от IvanR

Да. Спасибо огромное. Я так и сделал, еще я сделал так чтобы шел трафик на eth3 если падает соединение ppp0

spiritkhl
() автор топика
Ответ на: комментарий от spiritkhl

ну да, я тоже это имел в виду, покажите скрипты что ли)))

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