DD-WRT: Bagaimana memungkinkan penerusan port berlaku untuk permintaan yang berasal dari dalam LAN?

26

Dengan firmware asli dari router saya, saya memiliki port forwarding yang ditentukan dari port 80 ke server di LAN, yang saya gunakan bersama dengan layanan DNS dinamis eksternal.

Saya sekarang telah meningkatkan ke DD-WRT dan sayangnya penerusan port hanya berfungsi untuk permintaan ke IP eksternal dari luar LAN. Dari dalam LAN saya hanya dapat mengakses server dengan IP internal.

Bagaimana saya bisa mendapatkan IP eksternal (dan dengan demikian nama domain terhubung ke IP eksternal dinamis) agar dapat diakses dengan baik juga dari dalam LAN?

Saya lebih suka mencari tahu bagaimana mencapainya dengan definisi standar DD-WRT tetapi menggunakan misalnya iptables tidak keluar dari pertanyaan.

UrEl
sumber

Jawaban:

25

Sepertinya ini adalah bug di build DD-WRT baru-baru ini.

Gunakan iptables:

iptables -t nat -I POSTROUTING -o br0 -s 192.168.1.0/24 -d 192.168.1.0/24 -j MASQUERADE

(ubah subnet Anda sesuai dengan LAN spesifik Anda)

Dari http://hax.at/text/41

UrEl
sumber
Itu TIDAK jelas! bekerja seperti pesona :)
Jay
Saya mengatur ini sebagai perintah startup dan reboot router, tetapi tidak ada perubahan - masih tidak berfungsi.
Timwi
Bekerja untukku. Terima kasih banyak. Sekarang saya dapat mengakses IP yang ditugaskan dari jaringan internal saya di router DD-WRT saya.
nusi
3
Ini bekerja untuk saya, tetapi hanya jika saya menyimpannya sebagai skrip firewall dan bukan skrip startup.
Jarett Millard
@ Timwi - Seperti yang disebutkan Jarett, saya juga harus meletakkan ini di bagian "Firewall", bukan bagian "Startup".
dan_linder
4

Dengan semangat jawaban UrEl: iptablesSkrip konfigurasi sendiri yang hanya dapat disalin tanpa adaptasi lebih lanjut dapat ditemukan di forum DD-WRT :

insmod ipt_mark 
insmod xt_mark 
iptables -t mangle -A PREROUTING -i ! `get_wanface` -d `nvram get wan_ipaddr` -j MARK --set-mark 0xd001 
iptables -t mangle -A PREROUTING -j CONNMARK --save-mark 
iptables -t nat -A POSTROUTING -m mark --mark 0xd001 -j MASQUERADE 

Seperti dicatat oleh Jarett, ini harus digunakan sebagai skrip Firewall dan bukan sebagai skrip Startup.

krlmlr
sumber
Solusi ini lebih baik untuk saya daripada UrEI karena solusi ini membuat ponsel SIP saya tidak dapat terhubung.
jamix
Apa perbedaan antara ini dan aturan @ UrlEl (selain secara dinamis mendapatkan antarmuka wan dan alamat ip)?
Piotr Dobrogost
1

Coba nonaktifkan "Filter redirect WAN NAT" di tab Security-> Firewall. Dari uraian bantuan:

Filter WAN NAT Redirection Mencegah host di LAN menggunakan alamat WAN dari router untuk menghubungi server di LAN (yang telah dikonfigurasi menggunakan port redirection).

Tobias Plutat
sumber
Itu sudah dinonaktifkan (secara default). Ada ide lain?
UrEl
Itu aneh - di LAN saya, pengaturan ini yang membuat perbedaan. Bangunan mana yang Anda gunakan? Mungkin Anda harus memeriksa ulang penerusan porta Anda - mungkin ada sesuatu yang salah di sana yang Anda lewatkan (mungkin IP telah berubah antara akses eksternal dan internal Anda, sehingga memutus penerusan porta?)
Tobias Plutat
Saya menggunakan 16994. Sementara itu saya menemukan ini: hax.at/text/41
UrEl
Oh, betapa aku suka rilis DD-WRT yang buggy! (Membangun koneksi dari klien yang digunakan untuk mengambil waktu lama untuk beberapa waktu ... sampai saya menemukan bahwa nama host dalam sewa statis hanya boleh berisi karakter alfabet. Arrgh!)
Tobias Plutat
1

Kedengarannya seperti masalah Anda yang sebenarnya adalah bahwa Anda memerlukan dua tampilan catatan DNS A. Secara dinamis, dns dinamis Anda menunjuk ke IP publik jaringan Anda yang meneruskan port 80 ke host lokal. Yang perlu Anda lakukan adalah menambahkan entri di dnsmasq dengan catatan A yang menunjuk nama domain yang sepenuhnya memenuhi syarat yang sama ke ip host lokal untuk host lokal Anda. Anda dapat melakukannya dengan menambahkan berikut ini di halaman Layanan / Opsi dnsmasq tambahan:

 address=/www.mydomain.com./xx.xx.xx.xx

ganti saja xx dengan ip lokal dan nama domain dengan nama domain Anda. Jangan lupa trailing dot atau itu akan menambahkan nama domain lokal Anda ke sana.

systemconcierge
sumber
Inilah yang saya lakukan, dan berhasil! Tetapi apakah mungkin untuk melakukan ini pada port tertentu? Ini hanya akan berfungsi jika Anda meneruskan port ke satu komputer. Jika Anda meneruskan porta ke beberapa komputer, itu tidak akan berfungsi ...
rinogo