Saya memiliki layanan yang berjalan pada 127.0.0.1 dengan port 2222. Saya perlu meneruskan semua permintaan ke 192.168.2.2.222.22 (di luar IP) hanya dari subnet 192.168.1.0/24 ke 127.0.0.1.1222.
Saya mencoba menggunakan ini, tetapi tidak berfungsi.
$ iptables -t nat -I PREROUTING -p tcp -d 192.168.1.0/24 --dport 2222 -j DNAT --to-destination 127.0.0.1:2222
Bagaimana saya bisa membuatnya bekerja?
UPD: Edit skema alamat.
iptables
port-forwarding
network-interface
SimWhite
sumber
sumber
2222
pada antarmuka loopback dari subnet192.168.1.0/24
? Itu bukan hanya satu jenis aturan pengaturan. Lihat di sini: debuntu.org/…Jawaban:
Aturan iptables yang Anda gunakan akan berfungsi, tetapi ada satu perubahan tambahan yang perlu Anda lakukan:
(Mengganti
eth0
dengan nic192.168.2.2
berada di)Secara default, nilai ini adalah
0
, yang memerintahkan kernel untuk tidak merutekan lalu lintas eksternal yang dituju127.0.0.0/8
. Ini hanya untuk keamanan karena lalu lintas seperti itu tidak normal.Catatan tambahan: aturan iptables Anda saat ini terlalu luas. Aturan Anda menentukan
-d 192.168.1.0/24 --dport 2222
sebagai pencocokan tujuan, yang berarti bahwa jika mesin Anda mencoba untuk berbicara dengan host lain di port 2222 (yaitu lalu lintas keluar), itu akan diarahkan juga. Anda harus mengubah-d
pertandingan-d 192.168.2.2
, atau menambahkan-i eth0
(atau apa pun nic Anda).sumber
route_localnet
. Apakah ada nama lain untuk itu? (di linux 2.6.30)ls /proc/sys/net/ipv4/conf/lan/
: accept_redirects arp_accept arp_filter arp_notify disable_policy force_igmp_version log_martians medium_id proxy_arp secure_redirects shared_media accept_source_route arp_announce arp_ignore bootp_relay disable_xfrm forwarding mc_forwarding promote_secondaries rp_filter send_redirects tagroute_localnet
lebih baru (7 Juni 2012) dari kernel saya (2.6.30-std-def-alt15 # 1 SMP Sen 14 Des 08:45:48 UTC 2009). Ok, saya hanya akan mencapai port forwarding yang diinginkan (dari luar ke dalam) dengan proses forwarding sepertinetcat
(nc
)xinetd
,, atau opsi port-forwardingssh
(yang terakhir tidak efektif dan bodoh, tentu saja, tapi saya menyebutkannya, karena, yah, kemungkinan ini ada).sysctl -w net.ipv4.conf.all.route_localnet=1
Anda dapat mengarahkan ulang ke localhost tetapi tidak ke loopback (127.0.0.0/8). Loopback adalah celah. Anda harus mengarahkan ulang ke salah satu antarmuka nyata Anda. Coba gunakan REDIRECT.
iptables -t nat -A PREROUTING ..... -j REDIRECT --to-port 222
sumber
-j DNAT --to-destination w.x.y.z:222
Bagaimana jika jawaban yang benar dengan
route_localnet
tidak berhasil? ..Jika kernel Anda tidak menyertakan tambalan
route_localnet
, maka ... tingkatkan kernel!Atau ada cara lain untuk meneruskan lalu lintas yang datang ke satu antarmuka ke port lain pada antarmuka lain (khususnya, ke localhost) dengan menjalankan proses yang akan mendengarkan pada antarmuka eksternal dan meneruskan lalu lintas.
netcat
(nc
),,xinetd
danssh
(dan mungkin lebih) adalah contoh program yang dapat melakukan ini (walaupun memilihssh
akan aneh dan tidak efektif).Saya telah menulis konfigurasi
xinetd
untuk ini. Sekarang layanan ini secara otomatis ditampilkan:(
vaio.ob
adalah nama host ini pada antarmuka jaringan eksternal.)Setelah a
service xinetd reload
, mari kita periksa apakah ia mendengarkan:Dan memang, koneksi memang lewat!
sumber