Saya tidak sepenuhnya yakin apakah saya mengerti, tetapi saya pikir Anda berada di rantai yang salah. :-) Saya juga bingung ketika pertama kali menggunakan iptables. Tapi cara untuk maju lokal port ${LOCAL UNPRIV PORT} adalah pernyataan di bawah ini:
$IPT -t nat -A PREROUTING -i eth0 -p tcp --dport ${LOCAL UNPRIV PORT}
-j DNAT --to ${ANOTHER SYSTEM}:${REMOTE PORT}
Ini adalah campuran antara masalah semantik dan cara kerja netfilter:Di masa lalu meneruskan port lokal melibatkan koneksi ke kotak yang meneruskan, ditambah koneksi kedua ke tujuan. Iptables melakukan ini dalam satu langkah. Jadi alih-alih dua koneksi - Anda meneruskan lalu lintas ke port itu langsung ke tujuan. Netfilter melakukan semua pemeriksaan kewarasan dan pembukuan:hanya paket milik koneksi yang valid yang diberi NAT dan karenanya dapat diteruskan.
Mengaktifkan DNAT tidak mengizinkan paket apa pun untuk diteruskan. Anda juga harus menambahkan aturan:
$IPT -N INET-PRIV
$IPT -A FORWARD -i eth0 -o eth1 -j INET-PRIV
$IPT -A FORWARD -j DROP
$IPT -A INET-PRIV -p tcp -d ${ANOTHER SYSTEM} --dport ${REMOTE PORT} -j ACCEPT
$IPT -A INET-PRIV -j DROP
Dan Anda harus mengaktifkan penerusan tentunya.
echo "1" > /proc/sys/net/ipv4/ip_forward
Pro iptables :lebih aman, lebih fleksibel, lebih sedikit memori dan CPU yang digunakan per koneksi
Contra iptables :meneruskan koneksi dari mesin internal ke mesin internal (mengumpankannya kembali ke eth0) tidak masuk akal dengan iptables (tentu saja Anda selalu dapat terhubung secara langsung), meneruskan lalu lintas yang dihasilkan secara lokal tidak berfungsi (port meneruskan daemon mungkin membantu - tetapi biasanya tidak masuk akal)
Mungkin inilah masalahnya :Anda mencoba menggunakan NAT pada non-router, jadi Anda harus menggunakan daemon penerusan atau lewati penerusan port tambahan ini sepenuhnya dan lakukan:
ssh -L 1234:${ANOTHER SYSTEM}:${REMOTE PORT} special-vpn-box
Pada kotak-vpn-khusus, Anda hanya dapat mengizinkan koneksi masuk dari router dan koneksi keluar ke ${ANOTHER SYSTEM}:${REMOTE PORT} menggunakan iptables. Dengan demikian, pengguna kotak-vpn-khusus hanya dapat mengakses ${ANOTHER SYSTEM}:${REMOTE PORT} dan tidak akan dapat melakukan apa pun jika mereka tidak dipercaya.
Inilah yang saya lakukan khusus untuk penerusan localhost:
iptables -t nat -A OUTPUT -m addrtype --src-type LOCAL --dst-type LOCAL -p tcp --dport 3306 -j DNAT --to-destination ip.ip.ip.ip
iptables -t nat -A POSTROUTING -m addrtype --src-type LOCAL --dst-type UNICAST -j MASQUERADE
sysctl -w net.ipv4.conf.all.route_localnet=1
Pastikan Anda mengganti ip.ip.ip.ip
untuk IP publik asli Anda dan juga --dport 3306
untuk port yang ingin Anda teruskan.
Terakhir jalankan perintah sysctl dan perbarui juga /etc/sysctl.conf
Anda
Anda dapat memperbarui sysctl.ctl
untuk mengizinkan perutean localhost dengan perintah berikut:
echo "net.ipv4.conf.all.route_localnet=1" >> /etc/sysctl.conf
Sekarang ini semua tampak sederhana dan bagus tetapi memang perlu penelitian dan perburuan. Berhati-hatilah dan pahami bahwa meneruskan localhost/127.0.0.1 memerlukan metode ini dan contoh tipikal lainnya tidak berfungsi. Beberapa contoh solusi yang tidak berfungsi dengan localhost:
iptables -t nat -A PREROUTING -p tcp --dport 3306 -j DNAT --to ip.ip.ip.ip:3306
iptables -t nat -A POSTROUTING -d ip.ip.ip.ip -j MASQUERADE
http://realtechtalk.com/iptables_how_to_forward_localhost_port_to_remote_public_IP-1788-articles
# Enable IP Forwarding
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A PREROUTING -p tcp \
--dport ${LOCAL UNPRIV PORT} -j DNAT --to-destination ${ANOTHER SYSTEM}:${REMOTE PORT}
iptables -t nat -A POSTROUTING -p tcp \
--dst ${ANOTHER SYSTEM} --dport ${REMOTE PORT} -j SNAT --to-source ${LOCAL SYSTEM}