Saya memiliki kontainer LXC ( 10.0.3.2
) yang berjalan di host. Layanan berjalan di dalam wadah di pelabuhan 7000
.
Dari host ( 10.0.3.1
, lxcbr0
), saya dapat mencapai layanan:
$ telnet 10.0.3.2 7000
Trying 10.0.3.2...
Connected to 10.0.3.2.
Escape character is '^]'.
Saya ingin membuat layanan berjalan di dalam wadah yang dapat diakses oleh dunia luar. Oleh karena itu, saya ingin meneruskan port 7002
pada host ke port 7000
pada wadah:
iptables -t nat -A PREROUTING -p tcp --dport 7002 -j DNAT --to 10.0.3.2:7000
Yang menghasilkan ( iptables -t nat -L
):
DNAT tcp -- anywhere anywhere tcp dpt:afs3-prserver to:10.0.3.2:7000
Namun, saya tidak dapat mengakses layanan dari host menggunakan port yang diteruskan:
$ telnet 10.0.3.1 7002
Trying 10.0.3.1...
telnet: Unable to connect to remote host: Connection refused
Aku merasa kehilangan sesuatu yang bodoh di sini. Hal-hal apa yang harus saya periksa? Apa strategi yang baik untuk men-debug situasi ini?
Untuk kelengkapan, berikut adalah cara iptables
mengatur host:
iptables -F
iptables -F -t nat
iptables -F -t mangle
iptables -X
iptables -P INPUT DROP
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -o lxcbr0 -j MASQUERADE
iptables -t nat -A PREROUTING -p tcp --dport 7002 -j DNAT --to 10.0.3.2:7000
iptables
port-forwarding
lxc
Roberto Aloi
sumber
sumber
INPUT
rantai? Mungkin kebijakannyaREJECT
ada di sana.ACCEPT
FORWARD
rantai itu. Juga memeriksa apakah IP forwarding diaktifkan:cat /proc/sys/net/ipv4/ip_forward
.ip_forward
diatur ke1
FORWARD
kebijakan jugaACCEPT
Jawaban:
Tampaknya Anda telah memblokir port 7002 pada 10.0.3.1 karena kebijakan default Anda adalah DROP
Coba tambahkan ke aturan INPUT:
sumber
Saya mengalami masalah yang sama. Saya belum menemukan solusi, tetapi mengikuti saya mencatat beberapa pengamatan.
Saya memiliki
${host}
mesin host (Ubuntu 12.04) dan menjalankan mesin tamu melalui LXC. Tamu sudah aktifIP 10.0.3.248
dan gateway sudah10.0.3.1
. Saya menjalankan server web di tamu dan ingin mem-forward lalu lintas dari${host}:8888
ke10.0.3.248:80
. Berikut ini adalah entri iptables yang relevan:Dengan konfigurasi saat ini, saya dapat berhasil mengunjungi server web pada 10.0.3.248:80 dari mesin fisik lain. Namun, gagal ketika saya mencoba mengunjungi 10.0.3.248:80 dari
${host}
. Mungkin Anda dapat mencoba mengunjungi layanan itu di dalam LXC dari komputer lain.Pemahaman saya adalah bahwa, ketika saya berkunjung dari
${host}
, paket melewati antarmuka loopback dan memasuki rantai INPUT secara langsung. Meskipun saya mengizinkan semuanya di INPUT, tidak ada layanan mendengarkan${host}:8888
. Dari wireshark, saya melihat RST dikirim diterima. Ketika saya mengunjungi dari mesin fisik lain, paket itu masuk ke rantai PREROUTING dan DNAT-ed seperti yang diharapkan.Satu pos terkait:
sumber
Saya perlu menambahkan aturan FORWARD
sumber
ok, 5 sen saya dari tahun 2018:
Saya menginstal LXC dan bermain-main. IP kontainer saya adalah
10.0.0.10
Saya menambahkan aturan ini:
Itu tidak berhasil. Kemudian saya menyadari, bahwa bahkan kebijakan FORWARD adalah MENERIMA, ada aturan yang memblokir semua FORWARD.
Jadi saya harus menyuntikkan aturan di atas:
Sekarang maju
host:81
->10.0.0.10:22
berfungsi.sumber
Kontainer Anda dapat diakses dari LAN melalui antarmuka host bridge, dan dengan demikian terhubung ke subnet yang sama dengan host.
Anda harus meminta router Anda meneruskan port-port itu ke wadah Anda.
sumber