Sunday, August 28, 2011

Network nightmare

Короче в мене вже давно була одна проблема. В мене вдома був інтернет лише 3g від Utel. Але я мав кілька комп'ютерів у wifi мережі і хотів мати інтернет на всіх них + ше на мобільному і на PSP. Я довго гуглив у пошуках якогось TODO як збудувати таку мережу, щоб ноутбук з 3g модемом і інтернетом включався в wifi мережу і роздавав інтернет на всі девайси, які туди під'єднуються. Серед того, що було в інтернеті я знайшов кілька порад і зробив практично так, як хотів, тільки за винятком того, що у мене у wifi мережі усі ip-шки мусіли бути статичні. Інакше, якщо я піднімав dhcp-сервер на wifi роутері не працював інтернет ніде. Варіант зі статичними ip-шками працював досить довго, поки я не вирішив перепрошити свій wifi роутер dd-wrt прошивкою, яка обіцяла мені багато нових всяких фіч. Перепрошивка пройшла успішно і я взявся наново будувати мережу. І тут я подумав, що годі миритися зі статичними ip-шками для кожного девайсу! (Тим більше, що (на носі ipv6) в своїй nokia я не мав можливості виставити статичний ip і, відповідно, вона не працювала у моїй домашній екосистемі). Короче далі буде такий собі путівник по побудові мережі з різноманітними інтерфейсами. (Тим більше я переконаний, що багато людей думали про це, з огляду на популярність 3g інтернету)

невеличке виправдання:
я не системний адміністратор, тому спосіб описаний тут може бути далеко не оптимальним, але він працює
кінець невеличкого виправдання.

Отже, в мене є:
1. Нетбук з 3g модемом і інтернетом від Utel
2. Стаціонарний комп'ютер, на якому повинен бути інтернет
3. WIFI точка доступу, яка повинна динамічно роздавати ip-шки всім девайсам, які до неї підключені + давати ім інтернет
4. Мобільний телефон Nokia - який не має можливості виставляти ні статичну ip, ні gateway, ні DNS - але повинен підключитись в мережу і мати інтернет

Почнем конфігурацію з нетбука
На ньому стоїть Ubuntu 11.04. Він має 2 мережевих інтерфейси - ppp0(3g інтернет) і wlan0(wifi). Інтернет від Utel там не проблема настроїти. Потрібно зробити, щоб цей інтернет роздавався по wifi. Для цього треба виконати такі 3 команди:

sudo iptables -A FORWARD -i ppp0 -o wlan0 -s 192.168.0.0/24 -m conntrack --ctstate NEW -j ACCEPT

sudo iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

sudo iptables -A POSTROUTING -t nat -j MASQUERADE

В результаті такого Network Adress Translation пакети з інтерфейсу ppp0 будуть передаватись на wlan0 - тобто у wifi мережу. (Тут і далі всі ip-шки починаються з 192.168.1.1 і далі. Стандартно.)
Ці команди потрібно виконувати при кожній загрузці комп'ютера, тому варто їх прописати десь у /etc/rc.local

Тепер підключимось до wifi мережі з нетбука. Стандартний спосіб з використанням dhcp сервера на wifi роутері не працює, бо пропадає 3g інтернет (чому? я так і не визначив). Тому в NetworkManager ставимо Method підключення Manual і виставляємо статичну ip-шку для нетбука. Вона нам потім ще знадобиться при настройці gateway'я. Отож ip ставим для прикладу 192.168.1.2, mask - 255.255.255.0, gateway - 0.0.0.0 (До інтернету ми ж підєднуємось через ppp0 тому тут нам gateway не потрібен).

З першим етапом вроді все. На нетбуці є інтернет, є wifi. По ідеї інтернет транслюєтсья у wifi-мережу. Зараз ми це і перевіримо.

Етап 2 - конфігурація стаціонарного комп'ютера
Тут в мене теж Ubuntu 11.04. Заходжу в NetworkManager створюю wifi з'єднання, яке бере ip-шки у wifi-роутера по dhcp і бачу, що інтернету ніякого нема. В чому справа? Справа в тому, що стаціонарний комп'ютер може звертатись лише до wifi-роутера, а роутер зовсім нічого не знає про інтернет і про DNS.
Тут є 2 виходи: старий, яким я користувався колись і новий, який я дослідив сьогодні.
Старий - в NetworkManager для wifi з'єднання виставляємо знову ж таки статичний ip, наприклад 192.168.1.3, маску - 255.255.255.0 і gateway - 192.168.1.2 - тобто ір нетбука. Плюс, додатково вказуємо DNS-и. Я вказував фрішні 8.8.8.8 і 8.8.4.4. Тепер інтренет є, але статичний ip - це дуже незручно. І не всі девайси мають можливість виставляти статичну ip.
Новий метод
Як я вже казав, я собі прошив wifi роутер dd-wrt прошивкою. І там в настройках роутера (можливо це було і в стандартних настройках, вже не пам'ятаю), при включеному dhcp, є поля для введення gateway'я і Static DNS-ів. В них вводимо 192.168.1.2 і 8.8.8.8, 8.8.4.4 відповідно. Тепер конектимся з стаціонарного комп"ютера у режимі "брати ip по dhcp". Всьо є! Круто.

Пробую з телефона. Вибираю мережу, ввожу пароль і аллелуйя! Теж працює інтернет.

Висновок:
Роздавати 3g-інтернет по wifi реально. І не лише в режимі ad-hoc. Просто потрібно налаштувати iptables на нетбуці з інтернетом для трансляції пакетів у wifi мережу, а wifi роутер налаштувати, щоб він роздавав ip-шки по dhcp і доступався до нетбука, як до gateway'я + щоб мав виставлені DNS'и. І всо

Список використаної літератури:
https://help.ubuntu.com/community/Internet/ConnectionSharing

http://www.dd-wrt.com/wiki/index.php/Installation#Choosing_the_Correct_Firmware_-_Extremely_Important

http://www.dd-wrt.com/wiki/index.php/ASUS_WL-520GC

http://theos.in/windows-xp/free-fast-public-dns-server-list/

http://fishki.net/

No comments: