Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I can use my home computer A to connect by SSH to a server B where access to the external network is blocked. In other words, all requests to Internet from B throw an error: Network is unreachable. Can I redirect all these requests to pass through the computer A which has an unrestricted access to Internet?

Server B is a server which hosts one of my website. I want to download files in order to install some software. But the connection is blocked. I was able to transfer files but it was complicated because the software versions are different on A and B, so the dependencies where different and it required different files on A and B.

I searched on Internet and it seems that I need a reverse tunnel. But I only found solutions where a port is redirected. But it's not what I need since I don't want B to access to A but to Internet.

share|improve this question
if the downvoter of this questions sees this comment, would you mind letting us know why? I don't see anything wrong with it, even if the answer is "not possible". – strugee Feb 21 '14 at 2:11
Possible duplicate of unix.stackexchange.com/questions/111972/… – Lawrence Feb 21 '14 at 2:24
ssh allows you to do either local or remote port forwarding -- i.e. when an application on B attempts to open a local port X, that gets forwarded to A as an attempt to open whatever port you've specified. So then A is free to forward that connection request out to the Internet. You haven't mentioned what port(s) or protocols you're trying to use, that would make construction of detailed answers easier. – Stabledog Feb 21 '14 at 6:29
I'm trying to use composer, so it should be HTTP and HTTPS requests to github in order to download the packages. – A.L Feb 22 '14 at 16:44
up vote 3 down vote accepted

You can run a proxy on Computer A that computer B would then connect to in order to access the internet through Computer A.

Something like this

             +----------+            +-----------+
             |          |+----SSH+-->|           |
             |     A    |            |    B      |
             |+--------+|            |           |
  Internet <-++-+PROXY<++<SSH Tunnel--+          |
             |+--------+|            |           |
             +----------+            +-----------+

Install a proxy like squid on A which listens on port 3128, and then you can ssh to the server with this -
ssh -L 3128: user@B

That will allow B to access the internet through A

share|improve this answer
Once connected to B, how the requests to Internet will be redirected to A? There's no configuration to change? – A.L Apr 18 '14 at 21:30
You'll need to set a proxy server on B to – Lawrence Apr 22 '14 at 3:28

@Lawrence 's answer was good enough for me to get it all down. But here are the more detailed steps I used.

I used this for using my laptops 4g dongle to route internet to a raspberry pi with a fixed line connection to a wifi router.

If your host is a mac: install squidman http://squidman.net/squidman/

(not just generic squid, I had too much trouble with building it) The default settings seemed good enough for me.

connect to 4g connect to wifi - configure a static ip on your wifi and remove the gateway address (unless you are doing advanced things) else you get two default routes and its very annoying. - make sure your wifi router is not using the same 192.168.x.y range (configure a different "x" in this case)

ssh -R 8080:localhost:8080 pi@<ip address of the pi or target machine>

On the PI

export http_proxy=http://localhost:8080

with visudo add the text:

Defaults env_keep = "http_proxy https_proxy ftp_proxy"

Now wget will work and so will sudo apt-get so you can install packages.

If you want git as well its here: http://stackoverflow.com/questions/128035/how-do-i-pull-from-a-git-repository-through-an-http-proxy

share|improve this answer
Thanks for your answer. What is the role of visudo here? Where do you add the text? (I can't use sudo on my Web hosting) – A.L Sep 14 '15 at 16:56
I dont really understand your question, but if you just type visudo into terminal (you might need a 'sudo visudo') you can add the line of text to the bottom. – SpiRail Mar 18 at 15:38
there's no root access on my Web hosting. – A.L Mar 18 at 16:34
It was a long time ago now. But from memory visudo edits the sudoers file and the line being added means that those user environment variables are kept when typing sudo. If you cant do sudo, then you don't need this step anyway. – SpiRail Jun 13 at 9:59

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.