Berikan akses server ke Internet, melalui koneksi klien dengan SSH

17

Saya dapat menggunakan komputer di rumah saya A untuk terhubung dengan SSH ke server B di mana akses ke jaringan eksternal diblokir. Dengan kata lain, semua permintaan ke Internet dari B melempar kesalahan: Jaringan tidak dapat dijangkau . Dapatkah saya mengalihkan semua permintaan ini untuk melewati komputer A yang memiliki akses tidak terbatas ke Internet?

Server B adalah server yang menampung salah satu situs web saya. Saya ingin mengunduh file untuk menginstal beberapa perangkat lunak. Tetapi koneksi diblokir. Saya bisa mentransfer file tapi itu rumit karena versi perangkat lunak yang berbeda pada A dan B , sehingga ketergantungan mana yang berbeda dan itu diperlukan file yang berbeda pada A dan B .

Saya mencari di Internet dan sepertinya saya perlu terowongan terbalik. Tapi saya hanya menemukan solusi di mana port diarahkan . Tapi itu bukan yang saya butuhkan karena saya tidak ingin B mengakses A tetapi ke Internet.

AL
sumber
jika orang yang downvoter dari pertanyaan ini melihat komentar ini, maukah Anda memberi tahu kami alasannya? Saya tidak melihat ada yang salah dengan itu, bahkan jika jawabannya "tidak mungkin".
strugee
Kemungkinan duplikat dari unix.stackexchange.com/questions/111972/…
Lawrence
ssh memungkinkan Anda melakukan penerusan port lokal atau jarak jauh - yaitu ketika aplikasi pada B mencoba untuk membuka port lokal X, yang diteruskan ke A sebagai upaya untuk membuka port apa pun yang Anda tentukan. Jadi, A bebas untuk meneruskan permintaan koneksi itu ke Internet. Anda belum menyebutkan port atau protokol apa yang Anda coba gunakan, yang akan membuat konstruksi jawaban terperinci lebih mudah.
Stabledog
Saya mencoba menggunakan komposer , jadi seharusnya permintaan HTTP dan HTTPS ke github untuk mengunduh paket.
AL

Jawaban:

8

Anda dapat menjalankan proksi di Komputer A yang akan disambungkan oleh komputer B agar dapat mengakses internet melalui Komputer A.

Sesuatu seperti ini

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

Instal proxy seperti squid di A yang mendengarkan pada port 3128, dan kemudian Anda dapat ssh ke server dengan ini -
ssh -L 3128:127.0.0.1:3128 user@B

Itu akan memungkinkan B untuk mengakses internet melalui A

Lawrence
sumber
Setelah terhubung ke B, bagaimana permintaan ke Internet akan dialihkan ke A? Tidak ada konfigurasi untuk diubah?
AL
Anda harus mengatur server proxy pada B menjadi 127.0.0.1:3128
Lawrence
10

Hanya menambahkan beberapa langkah yang lebih jelas ke jawaban @Lawrence dan @ SpiRail.

Lakukan pengaturan sebagai berikut:

Pengaturan pada Host A:

  1. Instal server proxy Squid di Host A. Secara default Squid mendengarkan pada port 3128.
    yum install squid
  2. Beri komentar http_access deny alllalu tambahkan http_access allow alldi /etc/squid/squid.conf
  3. Jika Host A sendiri menggunakan beberapa proxy, katakanlah 10.140.78.130:8080 untuk terhubung ke internet maka tambahkan juga proxy itu /etc/squid/squid.confsebagai berikut:
refresh_pattern (Release|Packages(.gz)*)$ 0 20% 2880
cache_peer 10.140.78.130 parent 8080 0 no-query default
never_direct allow all

Pengaturan pada Host B:

  1. Tambahkan entri berikut ke / etc / environment
export http_proxy=http://127.0.0.1:3129
export https_proxy=http://127.0.0.1:3129
  1. source /etc/environment

Sekarang pengaturan kami selesai.

Membuat terowongan SSH dengan penerusan port jarak jauh

  1. Jalankan perintah SSH berikut dari Host A
    ssh -R 3129:localhost:3128 user@HostB

    Jika Anda ingin membuat terowongan SSH persisten, Anda dapat menggunakan autossh sebagai berikut:
    autossh -M 20000 -f -NT -R 3129:localhost:3128 user@HostB
    Agar perintah autossh di atas berfungsi, Anda harus mengatur SSH Keys dari HostA ke HostB.

  2. Ini akan memungkinkan Host B untuk mengakses internet melalui Host A.

Memeriksa internet:

  1. Jalankan perintah berikut dari Host B
    wget https://google.com

Diagram arus lalu lintas : masukkan deskripsi gambar di sini

Dhiru
sumber
5

@Lawrence menjawab cukup baik bagi saya untuk menyelesaikan semuanya. Tapi di sini ada langkah-langkah lebih rinci yang saya gunakan.

Saya menggunakan ini untuk menggunakan laptop saya dong dong 4g untuk merutekan internet ke raspberry pi dengan sambungan telepon tidak bergerak ke router wifi.

Jika host Anda adalah mac: instal squidman http://squidman.net/squidman/

(bukan hanya cumi-cumi generik, saya mengalami terlalu banyak masalah dengan membangunnya) Pengaturan default tampak cukup baik bagi saya.

sambungkan ke 4g sambungkan ke wifi - konfigurasikan ip statis di wifi Anda dan hapus alamat gateway (kecuali jika Anda melakukan hal-hal lanjutan) jika tidak, Anda mendapatkan dua rute default dan sangat mengganggu. - pastikan router wifi Anda tidak menggunakan rentang 192.168.xy yang sama (konfigurasikan "x" yang berbeda dalam kasus ini)

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

Di PI

export http_proxy=http://localhost:8080

dengan visudo tambahkan teks:

Defaults env_keep = "http_proxy https_proxy ftp_proxy"

Sekarang wget akan berfungsi dan sudo apt-get sehingga Anda dapat menginstal paket.

Jika Anda ingin git juga ada di sini: /programming/128035/how-do-i-pull-from-a-git-repository-through-an-http-proxy

SpiRail
sumber
Terima kasih atas jawaban anda. Apa peran visudodisini? Di mana Anda menambahkan teks? (Saya tidak bisa menggunakan sudohosting Web saya)
AL
Saya benar-benar tidak mengerti pertanyaan Anda, tetapi jika Anda cukup mengetik visudo ke terminal (Anda mungkin memerlukan 'sudo visudo'), Anda dapat menambahkan baris teks ke bawah.
SpiRail
tidak ada akses root di hosting Web saya.
AL
Sudah lama sekali sekarang. Tetapi dari memori visudo, mengedit file sudoers dan baris yang ditambahkan berarti bahwa variabel lingkungan pengguna disimpan saat mengetik sudo. Jika Anda tidak bisa melakukan sudo, berarti Anda tidak perlu langkah ini.
SpiRail