Saya memiliki server pengembangan, yang hanya dapat diakses dari 127.0.0.1:8000, bukan 192.168.1.x: 8000. Sebagai peretasan cepat, apakah ada cara untuk mengatur sesuatu untuk mendengarkan pada port lain (katakanlah, 8001) sehingga dari jaringan lokal saya dapat menghubungkan 192.168.1.x: 8001 dan itu akan menyalurkan lalu lintas antara klien dan 127.0 .0.1: 8000?
networking
tcp
tunneling
port-forwarding
tungguinrain
sumber
sumber
Jawaban:
Menggunakan ssh adalah solusi termudah.
Ini meneruskan port lokal 8001 pada workstation Anda ke alamat localhost pada port remote-server.com 8000.
-g
berarti mengizinkan klien lain di jaringan saya untuk terhubung ke port 8001 pada workstation saya. Kalau tidak, hanya klien lokal di workstation Anda yang dapat terhubung ke port yang diteruskan.-N
berarti semua yang saya lakukan adalah meneruskan port, jangan memulai shell.-f
berarti bercabang menjadi latar belakang setelah koneksi SSH berhasil dan masuk.Port 8001 akan tetap terbuka untuk banyak koneksi, sampai ssh mati atau terbunuh. Jika Anda kebetulan menggunakan Windows, klien SSH Putty yang sangat baik dapat melakukan ini juga. Gunakan 8001 sebagai port lokal dan localhost: 8000 dan tujuan dan tambahkan penerusan port lokal di pengaturan. Anda dapat menambahkannya setelah berhasil terhubung dengan Putty.
sumber
[email protected]
dilakukan? Ini jelas tidak diperlukan untuk penerusan port, namun ssh mengamanatkan argumen ini, terlebih lagi, ia mencoba untuk terhubung di sana. Dan setelah mengatur opsi sial ini untuk hostname itu output…port 22: Connection refused
(tidak, saya tidak menggunakan port 22) . Kecuali saya kehilangan sesuatu, perintahnya jelas tidak akan berhasil.[email protected]
hanyalah sebuah contoh dan Anda tidak harus menerimanya secara harfiah. Anda harus mengganti ini dengan nama komputer yang ingin Anda sambungkan dan nama pengguna Anda di komputer ini. Informasi ini diperlukan untuk membuat koneksi ssh. Hanya setelah koneksi ssh terbentuk, port dapat diteruskan melalui koneksi ini.-N
tidak berarti tidak ada koneksi SSH. Itu hanya berartido not execute a remote command
(lihat halaman manual ). The<user>@<host>
Argumen ini diperlukan, karena ini tidak membuka koneksi SSH ke<host>
(yang untuk kasus OP akanlocalhost
), dan meneruskan port yang diinginkan melalui bahwa SSH tunnel. Ini adalah salah satu solusi untuk masalah OP, tetapi bukan yang paling sederhana. Untuk meneruskan ke localhost tanpa menggunakan ssh, Anda dapat menggunakansocat
ataunetcat
seperti di StephaneChazelas dan bukan jawaban penggunaDengan
socat
di server:Secara default,
socat
akan mendengarkan pada port TCP 8001 pada alamat IPv4 atau IPv6 (jika didukung) pada mesin. Anda dapat membatasi ke IPv4 / 6 dengan menggantitcp-listen
dengantcp4-listen
atautcp6-listen
, atau ke alamat lokal tertentu dengan menambahkan a,bind=that-address
.Sama dengan soket penghubung yang Anda gunakan untuk proxy, Anda dapat menggunakan alamat apa saja di tempat
localhost
, dan gantitcp
dengantcp4
atautcp6
jika Anda ingin membatasi resolusi alamat ke alamat IPv4 atau IPv6.Perhatikan bahwa untuk server mendengarkan pada port 8000, koneksi akan muncul sebagai berasal dari proksi (dalam kasus
localhost
, yang akan terjadilocalhost
), bukan klien asli. Anda harus menggunakan pendekatan DNAT (tetapi yang membutuhkan hak superuser) agar server dapat mengetahui siapa kliennya.sumber
range
dantcpwrap
opsi disocat
halaman manual).Menggunakan tradisional
nc
adalah solusi termudah:Versi ini
nc
ada dalamnetcat-traditional
paket di Ubuntu. (Anda harusupdate-alternatives
atau menyebutnyanc.traditional
.)Perhatikan bahwa berbeda dengan ssh ini tidak dienkripsi. Ingatlah itu jika Anda menggunakannya di luar satu host.
sumber
netcat-openbsd
?netcat
versi yang termasuk dalambusybox
:nc -v -lk -p 8001 -e /usr/bin/nc 127.0.0.1 8000
. ( Deskripsi params )nc
perintah berakhir setelah koneksi jarak jauh pertama. Tambahkan-k
jika Anda harus tetap menjalankannya.nc: cannot use -p and -l
pada CentOS 6.4. Apakah ada pekerjaan?OpenBSD netcat tersedia secara default di Linux dan juga pada OS X.
OSX:
Linux:
Alternatif yang bekerja pada OS X bash adalah menggunakan pipa dua arah . Ini dapat bekerja pada Unix lain:
sumber
ss -tan
ataunetstat -tan
.Mengutip jawaban David Spillett di ServerFault
Ini adalah biner sederhana yang mengambil file konfigurasi dalam format
bindaddress bindport connectaddress connectport
Sebagai contoh:
192.168.1.1 8001 127.0.0.1 8000
atau
0.0.0.0 8001 127.0.0.1 8000
jika Anda ingin mengikat port yang masuk ke semua antarmuka.
sumber
sumber
dport
, seperti padanc -v localhost 2345
, saya mengertiConnection refused
. Saya tidak terlalu bagus dalam iptables, tapi saya kira dport harus memiliki aplikasi mendengarkan.Berdasarkan jawaban Mark A. , saya harus membuat sedikit penyesuaian untuk membuatnya berfungsi untuk Mac saya (setidaknya pada macOS Mojave Versi 10.14.4)
Pernyataan printf itu tampaknya sangat penting. Kalau tidak, perintah netcat untuk terhubung ke port 8000 tidak akan pernah benar-benar mencoba untuk terhubung, dan perintah netcat untuk mendengarkan pada port 8001 tidak akan pernah benar-benar mendengarkan pada port 8001. Tanpa printf, setiap kali saya akan mencoba untuk terhubung ke port 8001 saya akan mendapatkan koneksi ditolak.
Asumsi saya adalah bahwa netcat entah bagaimana harus memblokir stdin (mungkin ia mencoba membacanya untuk beberapa alasan) sebelum benar-benar melakukan operasi Socket. Dengan demikian, tanpa pernyataan printf menulis ke fifo a, perintah netcat tidak akan pernah mulai mendengarkan pada port 8001.
Catatan: Saya akan meninggalkan jawaban pada posting Markus, tetapi saya belum memiliki reputasi.
sumber
Ini adalah cara baru untuk melakukan tunnel dua port udp di server: https://github.com/9crk/udpeer
udpeer 8001 8002
Untuk menguji:
sumber