Raspberry pi como router 3G/4G MEO

DMTG

Power Member
Ola amigos
Hoje venho apresentar-vos uma solução para aqueles que tem em casa o seu raspberry pi parado e querem dar o uso.

Para começar instalar no raspberry o sistema operativo
RASPBIAN WHEEZY

Apos instalação vamos instalar DONGLE 3G/4G HUAWEI
Todos os processos descritos devem ser feitos com root
Código:
sudo apt-get install usb-modeswitch

Caso a vossa pen não tenha embutido o software interno de dialup devem instalar os seguintes programas para que o raspberry consiga fazer o dialup da ligação de internet

Código:
sudo apt-get install ppp
Código:
sudo apt-get install wvdial

Configuração do ficheiro o ficheiro wvdial.conf (/etc/wvdial.conf) para MEO com pens HUAWEI

Código:
[Dialer Defaults]
New PPPD = yes
Dial Command = ATDT
Dial Attempts = 3
Modem = /dev/ttyUSB0
Modem Type = Analog Modem
ISDN = 0
Baud = 115200
Username = tmn
Password = tmn
Init1 = ATZ
Init2 = AT&F E1 V1 X1 &D2 &C1 S0=0

[Dialer MEO]
Carrier Check = on
Auto Reconnect = on
Idle Seconds = 0
Phone = *99***1#
Stupid Mode = 1
Init3 = AT+CGDCONT=1,"IP","internet"

agora ir ao ficheiro
Código:
/etc/network/interface
inserir o código
Código:
auto ppp0
iface ppp0 inet wvdial
provider MEO


ir ao ficheiro
Código:
/etc/rc.local
inserir antes
Código:
exit 0
o seguinte instrução
Código:
wvdial meo
faz arrancar automaticamente a pen assim que o raspberry reinicie

Agora vamos ativar o routing
ir ao ficheiro
Código:
sudo nano /etc/sysctl.conf
e ativar o comando
Código:
net.ipv4.ip_forward=1

depois vamos ativar o routing
Código:
$ sudo sysctl -w net.ipv4.ip_forward=1

Agora vamos atribuir um ip a porta rede do raspberry
ir ao ficheiro
Código:
/etc/network/interfaces

e editar o seguinte
Código:
auto eth0
iface eth0 inet static
address 192.168.2.1
netmask 255.255.255.0
sendo que o address fica a vossa escolha


Agora vamos instalar DHCP no raspberry

Código:
sudo apt-get install isc-dhcp-server

vamos configurar o ficheiro
Código:
 /etc/dhcp/dhcpd.conf

com o seguinte codigo
Código:
default-lease-time 600;
max-lease-time 7200;
ddns-update-style none;
# If this DHCP server is the official DHCP server for the local
# network, the authoritative directive should be uncommented.
authoritative;
log-facility local7;
subnet 192.168.2.0 netmask 255.255.255.0 {
  range 192.168.2.50 192.168.2.150;
  option broadcast-address 192.168.2.255;
  option routers 192.168.2.1;
  option subnet-mask 255.255.255.0;
  default-lease-time 600;
  max-lease-time 7200;
  option domain-name "oquequisere.local";
  option domain-name-servers 8.8.8.8, 8.8.4.4;
  interface eth0;
}

Agora vamos reencaminhar o trafego para a porta de rede

começando por instalar
Código:
sudo apt-get install iptables

Agora vamos criar um script NAT and forwarding na pasta /root/

Nome do ficheiro ipt.sh

Código:
#!/bin/bash
LAN="eth0"
WAN="ppp0"
# flush tables
iptables -F
iptables -t nat -F
# apply routing
iptables -t nat -A POSTROUTING -o $WAN -j MASQUERADE
iptables -A FORWARD -i $WAN -o $LAN -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i $LAN -o $WAN -j ACCEPT

vamos dar permissão para ser executado

Código:
chmod +x ~/ipt.sh
sudo ~/ipt.sh

vamos colocar estas definições no arranque basta fazer
Código:
sudo sh -c "iptables-save > /etc/iptables.ipv4.nat"

ir ao ficheiro
Código:
/etc/rc.local
inserir antes
Código:
exit 0
Código:
/home/ipt.sh

Agora vamos criar uma ficheiro
Código:
/etc/network/if-up.d/iptables
inserir o seguinte codigo
Código:
#!/bin/bash
/sbin/iptables-restore < /etc/iptables.ipv4.nat

vamos por ele executavel
Código:
sudo chmod +x /etc/network/if-up.d/iptables

Agora falta instalar proxy para poupar dados moveis fazendo alguma cache no raspberry
Código:
sudo apt-get install squid3

ir a pasta
Código:
/etc/squid3/
renomear o ficheiro squid.conf para squidold.conf
e criar um novo com o nome squid.conf e colocar o seguinte
Código:
http_port 3128 transparent
refresh_pattern ^ftp:           1440    20%     10080
refresh_pattern ^gopher:        1440    0%      1140
refresh_pattern -i (/cgi-bin/|\?) 0     0%      0
refresh_pattern .               0       20%     60
acl manager url_regex -i ^cache_object:// +i ^https?://[^/]+/squid-internal-mgr/
acl localnet src 192.168.2.0/24
acl localhost src 127.0.0.1/32
acl SSL_ports port 443
acl Safe_ports port 80          # http
acl Safe_ports port 21          # ftp
acl Safe_ports port 443         # https
acl Safe_ports port 70          # gopher
acl Safe_ports port 210         # wais
acl Safe_ports port 1025-65535  # unregistered ports
acl Safe_ports port 280         # http-mgmt
acl Safe_ports port 488         # gss-http
acl Safe_ports port 591         # filemaker
acl Safe_ports port 777         # multiling http
acl CONNECT method CONNECT
http_access allow manager localhost
http_access allow manager all
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost
http_access allow localnet
http_access deny all

# Resolve um problema com conexoes persistentes que ocorre com certos servidores,
# e que provoca delays no cache.
detect_broken_pconn on

# Provoca um ganho de performance ao usar conexoes Pipeline (requisicoes em paralelo)
pipeline_prefetch on

cache_mgr [email protected]
cache_mgr webmaster
mail_program mail

cache allow all
#Esta linha define quanto da memória RAM (no caso 128MB) será usada pelo cache: em um servidor dedicado é recomendado
#reservar 1/3 da memória RAM para o cache.
cache_mem 128 MB

#Esta linha é a que realmente define o tamanho total do cache em disco. O endereço refere a que diretório se deseja
#utilizar como cache, seguido do tamanho máximo do cache no disco (em MB) e os dois últimos números da linha
#indicam a quantidade de pastas e subpastas que o Squid utilizará para se organizar ao gravar o cache;
cache_dir ufs /var/spool/squid3 3072 16 256

#Esta linha define o tamanho máximo dos objetos na RAM. Defina um tamanho pequeno para que sejam salvos
#apenas páginas html na RAM e não downloads por exemplo, que devem ser salvos no disco.
maximum_object_size_in_memory 32 KB

#Define o tamanho máximo dos objetos no cache do disco. Aqui serão armazenados os downloads por exemplo.
#Se tem costume de baixar arquivos grandes, coloque um tamanho grande.
maximum_object_size 1536 MB

#Tamanho mínimo dos objetos no cache.
minimum_object_size 0 KB

#Essas linhas indicam que a partir do momento em que o cache atingir 90%,
#serão descartados arquivos mais antigos até que a porcentagem volte para um número abaixo de 80%.
cache_swap_low 80
cache_swap_high 90

#Também gosto de usar o DNS do google, por isso adiciona a linha abaixo
dns_nameservers 8.8.8.8 8.8.8.4

restart squid3
Código:
sudo /etc/init.d squid3 restart

ir ao ficheiro ipt.sh e adicionar
Código:
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128

exportar para o arranque
Código:
sudo sh -c "iptables-save > /etc/iptables.ipv4.nat"

Pronto a funcionar

Se for uma pen com ip interno (192.168.8.1 ou algo do genero) nao é preciso instalar o ppp e wvdial

e fazer as seguintes alterações
no
/etc/network/interfaces
substituir
Código:
auto ppp0
if inet ppp0 wvdial
provider meo
por
Código:
auto wwan0
iface wwan0 inet dhcp


no ficheiro ipt.sh
substituir
Código:
wan="ppp0"
por

Código:
wan="wwan0"

adicionar o tambem

Código:
# colocar huawei web interface disponivel
iptables -t nat -A PREROUTING -p tcp --dport 2525 -j DNAT --to-destination 192.168.8.1:80
ex: 192.168.2.1:2525

no final voltar a executar o comando
Código:
sudo sh -c "iptables-save > /etc/iptables.ipv4.nat"


ir ao ficheiro /etc/rc.local e retirar o codigo
Código:
wvdial meo

Está operacional a funcionar
Qualquer questão não hesitem em perguntar
 
Última edição:
Bom post, mas na minha opiniao por um raspberry a fazer core switching é algo demasiado brusco... Basta um xmas tree attack e isso moi o CPU todo e rebenta por todo o lado.

Existem alternativas muito mais interessantes, por exemplo uma routerboard da Mikrotik. Configuras o que descreves no post em 2 minutos via interface web (tens shell) e as configuraçoes por omissao sao interessantes.

Os PI's sao interessantes, mas nunca para cenários onde é necessário alguma robustez ;)
 
Muito bom! Isto funciona com pens de outras operadoras? Desde que seja huawei?
Boa Tarde

Sim funciona com qualquer operador so basta alterar o dialup de ligação a internet para a operadora em questão.
Sim por experiência própria e por maior compatibilidade costume usar pens da huawei
 
Back
Topo