Как раздать интернет через вторую сетевую карту (wlan0)

Как расширить домашнюю сеть устройств и обеспечить их всех интернетом, не затрачивая на это средств? Это легко сделать в том случае, если у вас есть один компьютер (лэптоп) с двумя сетевыми картами подключенный к интернету. В случае с лэптопом, то их там точно две, одна – это сетевая, для проводного соединения и вторая это для беспроводного соединения. В ПК же можно доставить вторую сетевую карту. Я буду рассматривать первый случай. Т.е. перенаправив входящий интернет на беспроводную карточку и начав передавать его, вы сможете подключить любое устройство, будь то телефон, КПК, смартфон, нетбук, лэптоп. Как это сделать, ниже.

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

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

Поехали…

– Есть сетевая карта(eth0) в ноутбуке(главный далее) которая подключена с помощью провода к ADSL-модему и получает интернет.

– Есть вторая беспроводная сетевая карта(wlan0) которая ничем не занята и просто-так простаивает.

Задача.

Раздать интернет получаемый картой eth0 на вторую карту wlan0 и дать возможность другим устройствам(смартфоны, КПК, ноутбуки) подключаться к вещаемой сети и выходить в Интернет.

Решение.

Нам необходимо пробросить с помощью NAT интернет на устройство wlan0. Присвоить ему IP-адресное пространство и подключить другое устройство.

NAT (от англ. Network Address Translation — «преобразование сетевых адресов») — это механизм в сетях TCP/IP, позволяющий преобразовывать IP-адреса транзитных пакетов. Также имеет названия IP Masquerading, Network Masquerading и Native Address Translation.

NAT выполняет две важных функции.
1.Позволяет сэкономить IP-адреса, транслируя несколько внутренних IP-адресов в один внешний публичный IP-адрес (или в несколько, но меньшим количеством, чем внутренних).
2.Позволяет предотвратить или ограничить обращение снаружи ко внутренним хостам, оставляя возможность обращения изнутри наружу. При инициации соединения изнутри сети создаётся трансляция. Ответные пакеты, поступающие снаружи, соответствуют созданной трансляции и поэтому пропускаются. Если для пакетов, поступающих снаружи, соответствующей трансляции не существует (а она может быть созданной при инициации соединения или статической), они не пропускаются.

Все действия проделываем от root

[email protected]:~$ su - 
Пароль: 
[email protected]:~$ su - 
Пароль: 
[email protected]:~# /etc/init.d/NetworkManager stop
 * Stopping network connection manager NetworkManager                       [ OK ] 
[email protected]:~# /etc/init.d/NetworkManager stop
 * Stopping network connection manager NetworkManager                       [ OK ] 

Диагностика интерфейсов (работают — не работают) что-бы узнать их состояние после отключения Network Manager

[email protected]:~# ping mail.ru
ping: unknown host mail.ru
[email protected]:~# ping mail.ru
ping: unknown host mail.ru
[email protected]:~# iwlist wlan0 scan
wlan0     Interface doesn't support scanning : Network is down
[email protected]:~# iwlist wlan0 scan
wlan0     Interface doesn't support scanning : Network is down

Оба интерфейса в дауне.
Получаем IP-адрес для проводного устройства (eth0)

[email protected]:~# dhclient eth0
Internet Systems Consortium DHCP Client V3.1.1
Copyright 2004-2008 Internet Systems Consortium.
All rights reserved.
For info, please visit http://www.isc.org/sw/dhcp/
wmaster0: unknown hardware address type 801
wmaster0: unknown hardware address type 801
Listening on LPF/eth0/00:1c:23:92:8e:35
Sending on   LPF/eth0/00:1c:23:92:8e:35
Sending on   Socket/fallback
DHCPREQUEST of 87.69.6.22 on eth0 to 255.255.255.255 port 67
DHCPREQUEST of 87.69.6.22 on eth0 to 255.255.255.255 port 67
DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 7
DHCPOFFER of 87.69.6.22 from 10.163.160.1
DHCPREQUEST of 87.69.6.22 on eth0 to 255.255.255.255 port 67
DHCPACK of 87.69.6.22 from 10.163.160.1
bound to 87.69.6.22 -- renewal in 36024 seconds.
[email protected]:~# dhclient eth0
Internet Systems Consortium DHCP Client V3.1.1
Copyright 2004-2008 Internet Systems Consortium.
All rights reserved.
For info, please visit http://www.isc.org/sw/dhcp/
wmaster0: unknown hardware address type 801
wmaster0: unknown hardware address type 801
Listening on LPF/eth0/00:1c:23:92:8e:35
Sending on   LPF/eth0/00:1c:23:92:8e:35
Sending on   Socket/fallback
DHCPREQUEST of 87.69.6.22 on eth0 to 255.255.255.255 port 67
DHCPREQUEST of 87.69.6.22 on eth0 to 255.255.255.255 port 67
DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 7
DHCPOFFER of 87.69.6.22 from 10.163.160.1
DHCPREQUEST of 87.69.6.22 on eth0 to 255.255.255.255 port 67
DHCPACK of 87.69.6.22 from 10.163.160.1
bound to 87.69.6.22 -- renewal in 36024 seconds.
[email protected]:~# ping google.co.il
PING google.co.il (74.125.77.104) 56(84) bytes of data.
64 bytes from ew-in-f104.google.com (74.125.77.104): icmp_seq=1 ttl=240 time=132 ms
64 bytes from ew-in-f104.google.com (74.125.77.104): icmp_seq=2 ttl=240 time=137 ms
64 bytes from ew-in-f104.google.com (74.125.77.104): icmp_seq=3 ttl=240 time=138 ms
^C
--- google.co.il ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 132.410/136.181/138.603/2.735 ms
[email protected]:~# ping google.co.il
PING google.co.il (74.125.77.104) 56(84) bytes of data.
64 bytes from ew-in-f104.google.com (74.125.77.104): icmp_seq=1 ttl=240 time=132 ms
64 bytes from ew-in-f104.google.com (74.125.77.104): icmp_seq=2 ttl=240 time=137 ms
64 bytes from ew-in-f104.google.com (74.125.77.104): icmp_seq=3 ttl=240 time=138 ms
^C
--- google.co.il ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 132.410/136.181/138.603/2.735 ms

Интерфйес поднялся, пинг на google прошел
Поднимаем беспроводной интерфейс.

[email protected]:~# ifconfig wlan0 up
[email protected]:~# ifup wlan0
Ignoring unknown interface wlan0=wlan0.
[email protected]:~# iwlist wlan0 scan
wlan0     Scan completed :
          Cell 01 - Address: 00:1B:9E:A3:4A:BA
                    ESSID:"oren"
                    Mode:Master
                    Channel:1
                    Frequency:2.412 GHz (Channel 1)
                    Quality=45/100  Signal level:-80 dBm  Noise level=-70 dBm
                    Encryption key:on
                    IE: Unknown: 00046F72656E
                    IE: Unknown: 010882848B962430486C
                    IE: Unknown: 030101
                    IE: Unknown: 050400010000
                    IE: Unknown: 2A0100
                    IE: Unknown: 2F0100
                    IE: Unknown: 32040C121860
                    IE: Unknown: DD0E0050F204104A0001101044000102
                    IE: Unknown: DD090010180200F0000000
                    IE: WPA Version 1
                        Group Cipher : TKIP
                        Pairwise Ciphers (1) : TKIP
                        Authentication Suites (1) : PSK
                    IE: Unknown: DD180050F2020101800003A4000027A4000042435E0062322F00
                    Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 11 Mb/s; 18 Mb/s
                              24 Mb/s; 36 Mb/s; 54 Mb/s; 6 Mb/s; 9 Mb/s
                              12 Mb/s; 48 Mb/s
                    Extra:tsf=0000005f41acbc4d
                    Extra: Last beacon: 660ms ago
[email protected]:~# ifconfig wlan0 up
[email protected]:~# ifup wlan0
Ignoring unknown interface wlan0=wlan0.
[email protected]:~# iwlist wlan0 scan
wlan0     Scan completed :
          Cell 01 - Address: 00:1B:9E:A3:4A:BA
                    ESSID:"oren"
                    Mode:Master
                    Channel:1
                    Frequency:2.412 GHz (Channel 1)
                    Quality=45/100  Signal level:-80 dBm  Noise level=-70 dBm
                    Encryption key:on
                    IE: Unknown: 00046F72656E
                    IE: Unknown: 010882848B962430486C
                    IE: Unknown: 030101
                    IE: Unknown: 050400010000
                    IE: Unknown: 2A0100
                    IE: Unknown: 2F0100
                    IE: Unknown: 32040C121860
                    IE: Unknown: DD0E0050F204104A0001101044000102
                    IE: Unknown: DD090010180200F0000000
                    IE: WPA Version 1
                        Group Cipher : TKIP
                        Pairwise Ciphers (1) : TKIP
                        Authentication Suites (1) : PSK
                    IE: Unknown: DD180050F2020101800003A4000027A4000042435E0062322F00
                    Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 11 Mb/s; 18 Mb/s
                              24 Mb/s; 36 Mb/s; 54 Mb/s; 6 Mb/s; 9 Mb/s
                              12 Mb/s; 48 Mb/s
                    Extra:tsf=0000005f41acbc4d
                    Extra: Last beacon: 660ms ago

Интерфейс поднялся. (не обращаем внимание на сеть, главное что поднялся интерфейс)
Создаем беспроводную сеть:

iwconfig wlan0 mode Ad-Hoc channel 1 essid virens
iwconfig wlan0 mode Ad-Hoc channel 1 essid virens

В /etc/network/interfaces пишем что-то вроде:

auto wlan0
iface wlan0 inet static
address 10.106.146.1
netmask 255.255.255.0
wireless-mode ad-hoc
wireless-channel 1
wireless-rate auto
wireless-essid virens
auto wlan0
iface wlan0 inet static
address 10.106.146.1
netmask 255.255.255.0
wireless-mode ad-hoc
wireless-channel 1
wireless-rate auto
wireless-essid virens

Пробрасываем форвардинг так:

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

или так:

gedit /etc/sysctl.conf
net.ipv4.ip_forward = 1
gedit /etc/sysctl.conf
net.ipv4.ip_forward = 1

Теперь делаем NAT так:

iptables -t nat -A POSTROUTING --out-interface eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING --out-interface eth0 -j MASQUERADE

При этом eth0 это интерфейс, который подключён к Интернету.

Сохраняем настройки NAT:

iptables-save > /etc/iptables.up.rules
iptables-save > /etc/iptables.up.rules

добавляем в /etc/networks/interfaces:

pre-up iptables-restore < /etc/iptables.up.rules
pre-up iptables-restore < /etc/iptables.up.rules

Применяем настройки

[email protected]:~# /etc/init.d/networking restart 
[email protected]:~# /etc/init.d/networking restart 

Берем ваше устройство, в моем случае это

1) iPhone
2) netbook EeePC 900

iPhone

Заходим «Настройки»«WI-FI» и вводим следующие

Адрес: IP 10.106.146.2 (непосредственно адрес устройства)
Маска подсети: 255.255.255.0 (Маска)
Маршрутизатор: 10.106.146.1 (это наш NAT, а именно адрес беспроводной карточки wlan0 на галвном комьютере)
DNS 80.179.52.100: (Адрес DNS должен быть от того интерфейса, который обеспечивает выход в сеть – иначе говоря, содержимое /etc/resolv.conf)

как показано на рисунке

Пингуем:

[email protected]:~# ping 10.106.146.2
PING 10.106.146.2 (10.106.146.2) 56(84) bytes of data.
64 bytes from 10.106.146.2: icmp_seq=1 ttl=64 time=2.88 ms
64 bytes from 10.106.146.2: icmp_seq=2 ttl=64 time=2.90 ms
64 bytes from 10.106.146.2: icmp_seq=3 ttl=64 time=3.64 ms
64 bytes from 10.106.146.2: icmp_seq=4 ttl=64 time=3.02 ms
^C
--- 10.106.146.2 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3003ms
rtt min/avg/max/mdev = 2.883/3.116/3.645/0.315 ms
[email protected]:~# ping 10.106.146.2
PING 10.106.146.2 (10.106.146.2) 56(84) bytes of data.
64 bytes from 10.106.146.2: icmp_seq=1 ttl=64 time=2.88 ms
64 bytes from 10.106.146.2: icmp_seq=2 ttl=64 time=2.90 ms
64 bytes from 10.106.146.2: icmp_seq=3 ttl=64 time=3.64 ms
64 bytes from 10.106.146.2: icmp_seq=4 ttl=64 time=3.02 ms
^C
--- 10.106.146.2 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3003ms
rtt min/avg/max/mdev = 2.883/3.116/3.645/0.315 ms

Пробуем выйти с телефона в инет, все должно работать.

Laptop EeePC 900

Подключаемся к сети:

root@annalinux:/home/colibris# ifconfig wlan0 down
root@annalinux:/home/colibris# iwconfig wlan0 mode ad-hoc
root@annalinux:/home/colibris# iwconfig wlan0 channel 1
root@annalinux:/home/colibris# iwconfig wlan0 essid virens
root@annalinux:/home/colibris# ifconfig wlan0 10.106.146.3/24
root@annalinux:/home/colibris# ifconfig wlan0 up
[email protected]:/home/colibris# ifconfig wlan0 down
[email protected]:/home/colibris# iwconfig wlan0 mode ad-hoc
[email protected]:/home/colibris# iwconfig wlan0 channel 1
[email protected]:/home/colibris# iwconfig wlan0 essid virens
[email protected]:/home/colibris# ifconfig wlan0 10.106.146.3/24
[email protected]:/home/colibris# ifconfig wlan0 up

Пингуем раздающий компьютер:

root@annalinux:/home/colibris# ping 10.106.146.1
PING 10.106.146.1 (10.106.146.1) 56(84) bytes of data.
64 bytes from 10.106.146.1: icmp_seq=1 ttl=64 time=19.5 ms
64 bytes from 10.106.146.1: icmp_seq=2 ttl=64 time=2.76 ms
64 bytes from 10.106.146.1: icmp_seq=3 ttl=64 time=3.17 ms
^C
--- 10.106.146.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 2.765/8.489/19.527/7.806 ms
[email protected]:/home/colibris# ping 10.106.146.1
PING 10.106.146.1 (10.106.146.1) 56(84) bytes of data.
64 bytes from 10.106.146.1: icmp_seq=1 ttl=64 time=19.5 ms
64 bytes from 10.106.146.1: icmp_seq=2 ttl=64 time=2.76 ms
64 bytes from 10.106.146.1: icmp_seq=3 ttl=64 time=3.17 ms
^C
--- 10.106.146.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 2.765/8.489/19.527/7.806 ms

Пингуем iPhone:

root@annalinux:/home/colibris# ping 10.106.146.2
PING 10.106.146.2 (10.106.146.2) 56(84) bytes of data.
64 bytes from 10.106.146.2: icmp_seq=1 ttl=64 time=9.73 ms
64 bytes from 10.106.146.2: icmp_seq=2 ttl=64 time=3.69 ms
64 bytes from 10.106.146.2: icmp_seq=3 ttl=64 time=2.79 ms
^C
--- 10.106.146.2 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 2.795/5.408/9.734/3.080 ms
[email protected]:/home/colibris# ping 10.106.146.2
PING 10.106.146.2 (10.106.146.2) 56(84) bytes of data.
64 bytes from 10.106.146.2: icmp_seq=1 ttl=64 time=9.73 ms
64 bytes from 10.106.146.2: icmp_seq=2 ttl=64 time=3.69 ms
64 bytes from 10.106.146.2: icmp_seq=3 ttl=64 time=2.79 ms
^C
--- 10.106.146.2 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 2.795/5.408/9.734/3.080 ms

Оба отвечают и это значит мы уже имеем сеть из 3-х устройств. Два из которых имеют доступ в интернет, это раздающий и iPhone.
Предоставим выход в интернет третьему устройству netbook EeePC 900

DNS – берем адрес из файла /etc/resolve.conf – раздающего компьютера:

[email protected]:~$ sudo nano /etc/resolv.conf 
nameserver 80.179.52.100
nameserver 80.179.55.100
[email protected]:~$ sudo nano /etc/resolv.conf 
nameserver 80.179.52.100
nameserver 80.179.55.100
[email protected]:~$sudo /etc/init.d/networking restart
[email protected]:~$sudo /etc/init.d/networking restart
[email protected]:~$ ping mail.ru
PING mail.ru (194.67.57.20) 56(84) bytes of data.
64 bytes from mail.ru (194.67.57.20): icmp_seq=1 ttl=109 time=163 ms
64 bytes from mail.ru (194.67.57.20): icmp_seq=2 ttl=109 time=175 ms
^C
--- mail.ru ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 163.605/169.306/175.008/5.716 ms
[email protected]:~$ ping mail.ru
PING mail.ru (194.67.57.20) 56(84) bytes of data.
64 bytes from mail.ru (194.67.57.20): icmp_seq=1 ttl=109 time=163 ms
64 bytes from mail.ru (194.67.57.20): icmp_seq=2 ttl=109 time=175 ms
^C
--- mail.ru ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 163.605/169.306/175.008/5.716 ms

Теперь доступ в инет в наличии.

Получаю доступ по SSH к первой машине:

root@annalinux:/home/colibris# ssh [email protected]
The authenticity of host '10.106.146.1 (10.106.146.1)' can't be established.
RSA key fingerprint is 3b:34:04:ab:18:2f:78:c3:dd:4c:31:47:d8:dc:5b:ba.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '10.106.146.1' (RSA) to the list of known hosts.
[email protected]'s password: 
Linux alexlinux 2.6.28-11-generic #42-Ubuntu SMP Fri Apr 17 01:57:59 UTC 2009 i686
The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.
To access official Ubuntu documentation, please visit:
http://help.ubuntu.com/
53 packages can be updated.
27 updates are security updates.
Last login: Sun May 17 19:54:13 2009 from annalinux.local
[email protected]:~$ 
[email protected]:/home/colibris# ssh [email protected]
The authenticity of host '10.106.146.1 (10.106.146.1)' can't be established.
RSA key fingerprint is 3b:34:04:ab:18:2f:78:c3:dd:4c:31:47:d8:dc:5b:ba.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '10.106.146.1' (RSA) to the list of known hosts.
[email protected]'s password: 
Linux alexlinux 2.6.28-11-generic #42-Ubuntu SMP Fri Apr 17 01:57:59 UTC 2009 i686
The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.
To access official Ubuntu documentation, please visit:
http://help.ubuntu.com/
53 packages can be updated.
27 updates are security updates.
Last login: Sun May 17 19:54:13 2009 from annalinux.local
[email protected]:~$ 

Доступ получен
Отключаемся.

Передаю с EeePC 900 файлик с настройками что-бы запостить на сайте.

root@annalinux:/home/colibris/Рабочий стол# scp adhoc.txt [email protected]:~/
booch@10.106.146.1's password: 
adhoc                                         100% 2614     2.6KB/s   00:00
[email protected]:/home/colibris/Рабочий стол# scp adhoc.txt [email protected]:~/
[email protected]'s password: 
adhoc                                         100% 2614     2.6KB/s   00:00

Это все.
Получили сеть из 3-ех разных устройств. Но все три устройства имеют прямое сообщение друг с другом и выход в интернет.

Откат настроек
Отключаем форвардинг:

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

Отключаем NAT:

sudo iptables -t nat -F
sudo iptables -t nat -F

Отключаем все правила в iptables:

sudo iptables -F
sudo iptables -F

Запускаем Network Manager:

sudo /etc/init.d/Network Manager start
sudo /etc/init.d/Network Manager start

За сим все. Все предыдущие настройки отменены.