Автор Тема: Малко по-задълбочено за рутацията на нет  (Прочетена 2139 пъти)

boby_to

  • Новаци
  • *
  • Публикации: 2
    • Профил
Здравейте. Имам малко въпросчета '<img'> Вероятно не ви отчудвам, но да карам по същество. Ползвам SuSE 10. В момента съм си настроил нета и съм с 1 реално IP. Въпросът ми е как да си опиша 2рото реално IP което получавам от същото трасе (същата лан карта). Как да си прехвърля второто реално IP на втората ми машина, която в момента е в локална мрежа с роутера и не е с реално IP. Как мога второто реално IP, което питах преди това да го опиша, да го прехвърля на втората машина и тя да е с реално IP. Дано сте ме разбрали какво искам да направя. Вързал съм 2те машини в локална мрежа и съм пуснал нет на локална основа 192.168......

Благодаря ви предварително. Извинявам се ако вече е писано по тази тема но аз не можах да открия нищо.
Активен

kennedy

  • Напреднали
  • *****
  • Публикации: 2151
  • Николай Колев
    • Профил
Искаш да направиш следното:
Имаш нет по лан на твоя компютър. Добавяш още един абонамент който искаш да ползваш на друг компютър който е зад твоя някъде в лана, но искаш да бъде с "реалното" ИП на 2-я абонамент. Правилно ли съм разбрал?
Активен

"за всичко иде час" Еклесиаст 3:1
всеки пост - отговор на въпрос
-----------------
24.12.2003 "MS Free"

Hapkoc

  • Напреднали
  • *****
  • Публикации: 2117
    • Профил
Единия вариант е да вържеш кабела от доставчика ти в един и същи комутатор като кабелите от двете машини и просто на всяка да настроиш въответния IP адрес.

Другия вариант е да правиш SNAT/DNAT от/към тази машина. Горе долу така:

iptables -t nat -A POSTROUTING -s $MACHINE2_LOCAL_ADDR -d ! $LOCAL_NET -j SNAT --to $MACHINE2_GLOBAL_ADDR

iptables -t nat -A PREROUTING -d $MACHINE2_GLOBAL_ADDR -j DNAT --to $MACHINE2_LOCAL_ADDR

MACHINE2_LOCAL_ADDR е адреса на втората машина в рамките на локалната ти мрежа. MACHINE2_GLOBAL_ADDR е въпросния втори публичен (а не "реален") адрес, който ти дава доставчика ти. LOCAL_NET е CIDR адреса на локалната ти мрежа (от вида 192.168.1.0/24).

(забележка: тези правила би трябвало да работят, но са примерни и леко "наивни")


За да работи въпросната схема трябва да настроиш втория адрес от доставчика ти на същата мрежова платка като първия. Това може по няколко начина да стане, примерно:

ip addr add $MACHINE2_GLOBAL_ADDR dev $EXT_IF

където EXT_IF е интерфейса, на който е вързах кабела към доставчика.

За да важи тази настройка и след като рестартираш машината трябва да се опише във файл/ове, който/ито е/са зависими от дистрибуцията ти.


И още нещо - термин "рутация" не мисля че съществува в българския език, а дори да има, вероятно не означава това, което имаш предвид. Или ползвай жаргонното "рутиране" (на мен не ми допада много, но пък е по-кратко), или ползвай коректния термин - маршрутизиране.



Активен

VladSun

  • Напреднали
  • *****
  • Публикации: 2166
    • Профил
На първата машина:

Примерен код

route add -host PUB_IP_2 dev INTERNAL_ETH
iptables -A FORWARD -s PUB_IP_2 -j ACCEPT
iptables -A FORWARD -d PUB_IP_2 -j ACCEPT


На втората машина си вдигни нормално PUB_IP_2.

ПС: не вдигай второто ип никъде на първата машина.

ППС: @Наркос Защо да се прави S/DNAT, когато IP-то е публично?



Активен

KISS Principle ( Keep-It-Short-and-Simple )
http://openfmi.net/projects/flattc/
Има 10 вида хора на този свят - разбиращи двоичния код и тези, които не го разбират :P

Hapkoc

  • Напреднали
  • *****
  • Публикации: 2117
    • Профил
VladSun, при схемата, която предлагаш не се ли получава нещо такова:


inet <---> eth0 [ router ] eth1 <---> [ switch ] <---> eth0 [ pc2 ]

router.eth0: public.ip.address.1
router.eth1: private.ip.address.1
pc2.eth0: public.ip.address.2

Ако правилно съм разбрал ми се струва, че ще трябва поне да се укаже безкласова маршрутизация на pc2 към private.ip.address.1. Нещо от рода на:

route add default gw private.ip.address.1 dev eth0

Иначе не се сещам как pc2, нямайки адрес в рамките на частната мрежа, ще се сети да прати пакетите обратно към маршрутизатора.

Може нещо да пропускам де.



Активен

gat3way

  • Напреднали
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Цитат

На първата машина:

route add -host PUB_IP_2 dev INTERNAL_ETH
iptables -A FORWARD -s PUB_IP_2 -j ACCEPT
iptables -A FORWARD -d PUB_IP_2 -j ACCEPT


Това няма да свърши работа според мен. Пакетите от втората машина ще достигат докъдето трябва, но обратното не.

Ще обясня защо. Нека машината с PUB_IP_2   се опита да установи TCP сесия с yahoo.com. Праща си SYN пакета със source addr - PUB_IP_2, първата машина го forward-ва, оттам нататък по веригата рутери SYN пакетът достига до yahoo.com. От yahoo се изпраща очакваният от втората машина SYN-ACK. Той пътува обратно по веригата рутери стигайки до пред-пред-последният hop - рутер на ISP-то. Оттам следва интересното. Според рутинг таблицата му PUB_IP_2 е адрес, който се води в един етернет сегмент с този в който е един от интерфейсите на рутера (както PUB_IP_1). Следва логично рутера да провери в ARP таблицата си отговаря ли някои MAC адрес на PUB_IP_2. Тъй като няма как да отговаря,защото в действителност те не са в един етернет сегмент (между рутера и машината с адрес PUB_IP_2 стои клиентският рутер с адрес PUB_IP_1) - рутерът на ISP-то ще прати ARP заявка за да открие коя е машината с PUB_IP_2. Отговор няма да пристигне и съответно рутерът на провайдъра ще върне ICMP destination unreachable. С tcp сесията дотук..

Има според мен няколко начина това да се реши:

Първият: на рутера на доставчика да се сложи един статичен маршрут (route add PUB_IP_2 gw PUB_IP_1).

Вторият: разрешаване на proxyarp на първата машина. Трябва да има и включен IP forwarding (echo 1 > /proc/sys/net/ipv4/ip_forward)

Третият: Включване на втората машина в суич заедно с външният интерфейс на първата машина и кабелът от доставчика (както предложи Наркос)

Четвъртият е най-забавен: ако доставчикът подържа някакъв динамичен рутинг протокол (да речем OSPF) може да се договорите с провайдъра за детайлите за авторизация (ако има) и да се вдигне  quagga с OSPF рутиране на първата машина. За само 2 клиентски публични адреса това наистина е убиване на муха с топ, но пък също би разрешило проблема '<img'>
Активен

"Knowledge is power" - France is Bacon

VladSun

  • Напреднали
  • *****
  • Публикации: 2166
    • Профил
@ Наркос
Да, прав си '<img'>
Точно това имах предвид. Поне на мен ми се струваше ясно, че трябва gateway-а на втората машина да е вътрешният адрес на първата машина.
Но ... си абсолютно прав, че това трябваше да се спомене. Имал съм спорове с хора, много по-напред с материала от мен, за това дали е възможно адреса на gateway-a да е извън рамките на мрежата. Тогава спорех въз основа на практически опит, но пак срещах възражения.
За да е ясна картинката на boby_to - ето пълната реализация (с малко мързел благодарение на Наркос и gate3way):

inet <---> eth0 [ router ] eth1 <---> [ switch ] <---> eth0 [ pc2 ]

router.eth0: public.ip.address.1
router.eth1: private.ip.address.1
router:
route add -host PUB_IP_2 dev INTERNAL_ETH
iptables -A FORWARD -s PUB_IP_2 -j ACCEPT
iptables -A FORWARD -d PUB_IP_2 -j ACCEPT
echo 1 > /proc/sys/net/ipv4/conf/eth0/proxy_arp ( мерси, gat3way )


pc2.eth0: public.ip.address.2
pc2:
default gateway private.ip.address.1



Активен

KISS Principle ( Keep-It-Short-and-Simple )
http://openfmi.net/projects/flattc/
Има 10 вида хора на този свят - разбиращи двоичния код и тези, които не го разбират :P

VladSun

  • Напреднали
  • *****
  • Публикации: 2166
    • Профил
@Gat3way

мдам, и това за proxyarp го бях забравил - при мен всичките рутери винаги са с включен proxyarp и поради това ми е убягнало в случая.
Активен

KISS Principle ( Keep-It-Short-and-Simple )
http://openfmi.net/projects/flattc/
Има 10 вида хора на този свят - разбиращи двоичния код и тези, които не го разбират :P

gat3way

  • Напреднали
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Vladsun, proxyarp е хубаво нещо '<img'>

Наркос, няма нужда от такива магии. /proc/sys/net/ipv4/conf/all/arp_ignore =0  на първата машина решава идеално точно този проблем и прави излишни тези магии с "безкласова маршрутизация"...в случая '<img'>

Машина 1 ще отговаря на вътрешния интерфейс на арп заявки за мак адреса на външния интерфейс. Ако на машина 2 е сложен default gw външния адрес на машина 1 няма да имаш проблем в случая...изпробвал съм го. Това обаче само при горното условие, в противен случай наистина трябва да се правят магии '<img'>

Въобще, линукския netowrking stack позволява доста неканонични дивни, които нерядко вършат доста полезна работа '<img'>



Активен

"Knowledge is power" - France is Bacon