Seu exemplo mostra um dispositivo tun
, portanto, precisamos usar exclusivamente o roteamento. Eu uso Raspbian Stretch Lite 2018-04-18 . A ideia é configurar uma configuração mínima estática sem quaisquer extras, por ex. dhcp server
ou mais. Se o roteamento funcionar, ele poderia ser estendido passo a passo.
Rede padrão em Raspbian é muitas vezes confusa, particularmente com configurações mais complexas [1]. Então eu uso systemd-networkd
que é projetado para configurações de servidor. Como é difícil adivinhar todos os endereços IP de suas interfaces, configurei meu teste com esses endereços IP:
10.10.10.2 +----------+ 10.10.10.1
/ vpn-tunnel | | \
(tun0) =============\ //======================> VPN-SERVER
PHONE ~.~.~.~.~.~> (wlan0)RPI(eth0) ------------> ROUTER ---> | INTERNET |
\ wifi / \ ethernet / wan | |
192.168.1.2 192.168.1.1 192.168.0.2 192.168.0.1 +----------+
Outro problema para mim é que eu não tenho um cisco3000 VPN Concentrator, portanto não posso usar vpnc
. Em vez disso, usei openvpn
, mas ele deve fazer as mesmas coisas no roteamento. Mas a configuração de uma infraestrutura openvpn
está fora do escopo aqui.
Você pode olhar para como migrar da rede para a systemd-networkd se quiser usar isso, mas você só tem que usar a Etapa 1 para a Etapa 3 com esses arquivos:
rpi ~$ sudo cat >/etc/systemd/network/04-eth.network <<EOF
[Match]
Name=e*
[Network]
Address=192.168.0.2/24
Gateway=192.168.0.1
EOF
rpi ~$ sudo cat >/etc/systemd/network/08-wifi.network <<EOF
[Match]
Name=wl*
[Network]
Address=192.168.1.1/24
IPForward=yes
EOF
ip forwarding
é essencial.
Não configure wpa_supplicant
. Em vez disso, instale hostapd
[2]:
rpi ~$ sudo -Es
rpi ~# systemctl disable wpa_supplicant.service
rpi ~# apt update
rpi ~# apt full-upgrade
rpi ~# apt install hostapd
rpi ~# systemctl stop hostapd.service
Configure o software host do ponto de acesso (hostapd) com este arquivo:
rpi ~# cat >/etc/hostapd/hostapd.conf <<EOF
interface=wlan0
driver=nl80211
ssid=MyTestAP
hw_mode=g
channel=6
wmm_enabled=0
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_passphrase=VerySecretPw
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
EOF
rpi ~# chmod 600 /etc/hostapd/hostapd.conf
Defina DAEMON_CONF="/etc/hostapd/hostapd.conf" em / etc / default / hostapd com:
rpi ~# sed -i 's/^#DAEMON_CONF=.*$/DAEMON_CONF="\/etc\/hostapd\/hostapd.conf"/' /etc/default/hostapd
rpi ~# systemctl reboot
Então você tem que definir uma rota estática no seu roteador de internet para que ele possa encontrar a rota sobre o raspi para o seu celular. Na maioria dos roteadores da Internet, você pode definir uma rota estática, mas como isso varia de modelo para modelo. Cabe a você descobrir isso. Em um Raspberry Pi ficaria assim (não configurá-lo em seu roteador Raspi!)
rpi ~$ sudo ip route add 192.168.1.0/24 via 192.168.0.2 dev ethX
Isso significa que para o roteador da Internet: "enviar todos os pacotes pertencentes à sub-rede 192.168.1.0/24
(rede de destino) para o próximo roteador na sub-rede, seu roteador raspi 192.168.0.2
(gateway). Ele sabe para onde ir. "
Se você não tem acesso ao roteador de internet, você pode fingir com nat
para dizer que todos os pacotes estão vindo do seu raspi. Coloque isso no seu Raspberry Pi:
rpi ~$ sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Mas isso deve ser apenas a segunda escolha, porque não é roteamento limpo e tem limitações e pode ser confuso.
Se você conectar agora seu celular ao MyTestAP configure-o com um endereço IP estático 192.168.1.2, gateway 192.168.1.1. Então você deve ser capaz de se conectar à internet.
A configuração é:
rpi ~$ ip addr # stripped to relevant information
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
inet 127.0.0.1/8 scope host lo
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
inet 192.168.0.2/24 brd 192.168.0.255 scope global eth0
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
inet 192.168.1.1/24 brd 192.168.1.255 scope global wlan0
rpi ~$ ip route
default via 192.168.0.1 dev eth0 proto static
192.168.0.0/24 dev eth0 proto kernel scope link src 192.168.0.2
192.168.1.0/24 dev wlan0 proto kernel scope link src 192.168.1.1
Agora eu estabeleço uma conexão vpn, por exemplo com:
rpi ~$ sudo openvpn myVpn.conf
A configuração então é:
rpi ~$ ip addr # stripped to relevant information
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
inet 127.0.0.1/8 scope host lo
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
inet 192.168.0.2/24 brd 192.168.0.255 scope global eth0
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
inet 192.168.1.1/24 brd 192.168.1.255 scope global wlan0
11: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 100
link/none
inet 10.10.10.2 peer 10.10.10.1/32 scope global tun0
rpi ~$ ip route
default via 192.168.0.1 dev eth0 proto static
10.0.0.0/8 via 10.10.10.1 dev tun0
10.10.10.1 dev tun0 proto kernel scope link src 10.10.10.2
192.168.0.0/24 dev eth0 proto kernel scope link src 192.168.0.2
192.168.1.0/24 dev wlan0 proto kernel scope link src 192.168.1.1
Aqui também devemos definir rotas estáticas no servidor VPN remoto, mas acho que não temos nenhuma chance de fazer isso. Então, só podemos falsificar o servidor com um nat
. No conjunto de raspi:
rpi ~$ sudo iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
Agora consegui entrar sempre na Internet com o meu telemóvel através da rede Wi-Fi, mas apenas na rede vpn se a ligação fosse estabelecida.
referências:
[1] dhcpcd vs / etc / network / interfaces
[2] Configurando um Raspberry Pi como um ponto de acesso