The first I got my hands on a raspberry pi, I wanted to update its OS to the latest, but the problem is that my RPi is connected to my laptop (using OpenSuse) and I am using SSH to access it (I don't have access to any displays).
First, prepare your SDCard for RPi, there are plenty of resources on how to prepare your SDCard. Then, follow this guide to configure your RPi for SSH access from your machine.
For this guide, I am using the following addressing scheme:
- RPi eth0 => 192.168.10.2/24
- Laptop eth0 (connected to RPi) => 192.168.10.1/24
- Laptop wlan0 (connected to router, default gateway) => 192.168.1.6/24
- Router (Internet access) => 192.168.1.254/24
Fixing Default Gateway on my Laptop##
When I connected to my RPi, Network Manager replaced my default gateway to
eth0, so I am not able to access the Internet after connected to RPi. You verify it by using
route command without parameters, if the default line points to eth0, it means your default gateway is overwritten, if it's not, it means you can skip this section, you can verify it by ping-ing
www.google.com. To fix this problem, I deleted the default gateway and added a new default gateway that points to my router:
$ sudo /sbin/route del default $ sudo /sbin/route add default gw 192.168.1.254 dev wlan0
Verify that your default gateway now points to wlan0 using
route command without parameters. Try to ping
www.google.com to make sure that your laptop have access to the Internet, your RPi won't be able to access the Internet if your laptop does not.
Adding Default Gateway to RPi##
route command add a default that points to eth0 interface:
$ sudo route add default gw 192.168.10.1 dev eth0
Out of the box without masquerading, once a packet sourced from 192.168.10.0/24 network (my RPi <==> laptop subnet) reaches the router on subnet 192.168.1.0/24, depends on the configuration, it will route or drop the packet. Even if the router successfully routed the packet to the Internet, it will definitely drop the packet, because it does not know where to route the packet for network 192.168.10.0/24 network. So, masquerading seems to be the only solution here.
Masquerading and Configuration##
Masquerading is like that Linux version of NAT, it translates your internal network to external network (e.g. for Internet access). What it does is that any packets bound for any network from 192.168.10.0/24 subnet will be translated to 192.168.1.0/24 subnet, so my router knows where to route my 192.168.10.0/24 packet.
Since I am using OpenSUSE, I will configure masquerading through its own firewall using YaST.
- Open up firewall configuration in YaST and select
- Double click eth0 interface and change it to
Masqueradingon the left and click
192.168.1.6(or your wlan0 IP) to
Redirect to Masqueraded IP
Redirect to Portor any ports you want your traffic to be translated to, but make sure you are not using any servers on that port
Startupon the left and click
Save Settings and Restart Firewall Now
- Try to ping
www.google.comfrom your RPi, you should get be able to at this point