LXC, Chuyển tiếp cổng và iptables


8

Tôi có một container LXC ( 10.0.3.2) đang chạy trên một máy chủ. Một dịch vụ đang chạy bên trong container trên cảng 7000.

Từ máy chủ ( 10.0.3.1, lxcbr0), tôi có thể tiếp cận dịch vụ:

$ telnet 10.0.3.2 7000
Trying 10.0.3.2...
Connected to 10.0.3.2.
Escape character is '^]'.

Tôi muốn làm cho dịch vụ chạy bên trong container có thể tiếp cận được với thế giới bên ngoài. Do đó, tôi muốn chuyển tiếp cổng 7002trên máy chủ sang cổng 7000trên container:

iptables -t nat -A PREROUTING -p tcp --dport 7002 -j DNAT --to 10.0.3.2:7000

Kết quả nào trong ( iptables -t nat -L):

DNAT   tcp  --  anywhere     anywhere     tcp dpt:afs3-prserver to:10.0.3.2:7000

Tuy nhiên, tôi không thể truy cập dịch vụ từ máy chủ bằng cổng chuyển tiếp:

$ telnet 10.0.3.1 7002
Trying 10.0.3.1...
telnet: Unable to connect to remote host: Connection refused

Tôi cảm thấy như tôi đang thiếu một cái gì đó ngu ngốc ở đây. Những điều tôi nên kiểm tra? Một chiến lược tốt để gỡ lỗi những tình huống này là gì?

Để hoàn thiện, đây là cách iptablesthiết lập trên máy chủ:

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

Bạn đã kiểm tra INPUTchuỗi? Có lẽ chính sách là REJECTcó.
Michael Härtl

Chính sách làACCEPT
Roberto Aloi

Xin lỗi, tôi có nghĩa là FORWARDchuỗi. Đồng thời kiểm tra xem chuyển tiếp IP có được kích hoạt không : cat /proc/sys/net/ipv4/ip_forward.
Michael Härtl

ip_forwardđược đặt thành1
Roberto Aloi

FORWARDchính sách cũng làACCEPT
Roberto Aloi

Câu trả lời:


3

Có vẻ như bạn đã chặn cổng 7002 vào ngày 10.0.3.1 vì chính sách mặc định của bạn là DROP

Hãy thử thêm nó vào quy tắc INPUT:

iptables -A INPUT -p tcp --dport 7002 -j ACCEPT

1

Tôi gặp vấn đề tương tự. Tôi chưa tìm thấy giải pháp, nhưng sau đây tôi ghi lại một số quan sát.

Tôi có một máy chủ ${host}(Ubuntu 12.04) và nó chạy một máy khách thông qua LXC. Khách đang ở IP 10.0.3.248và cổng là 10.0.3.1. Tôi chạy một máy chủ web trong máy khách và muốn chuyển lưu lượng truy cập từ ${host}:8888đến 10.0.3.248:80. Sau đây là các mục iptables có liên quan:

-A PREROUTING -p tcp --dport 8888 -j DNAT --to-destination 10.0.3.248:80
-A POSTROUTING -j MASQUERADE

Với cấu hình hiện tại, tôi có thể truy cập thành công máy chủ web vào ngày 10.0.3.248:80 từ một máy vật lý khác. Tuy nhiên, nó thất bại khi tôi cố gắng truy cập 10.0.3.248:80 từ ${host}. Có lẽ bạn có thể thử truy cập dịch vụ đó bên trong LXC từ một máy khác.

Hiểu biết của tôi là, khi tôi truy cập từ ${host}, gói đi qua giao diện loopback và nhập trực tiếp chuỗi INPUT. Mặc dù tôi cho phép mọi thứ trên INPUT, nhưng không có dịch vụ nào lắng nghe ${host}:8888. Từ wireshark, tôi thấy một RST được gửi đi. Khi tôi truy cập từ một máy vật lý khác, gói sẽ đi vào chuỗi PREROUTING và được DNAT-ed như mong đợi.

Một bài liên quan:


0

Tôi cần thêm quy tắc FORWARD

iptables -A FORWARD -p tcp -d 10.0.3.2 --dport 7002 -j ACCEPT

0

ok, 5 xu của tôi từ năm 2018:

Tôi đã cài đặt LXC và chơi xung quanh nó. IP container của tôi là10.0.0.10

Tôi đã thêm quy tắc này:

iptables -t nat -A PREROUTING -p tcp -i ens192 --dport 81 -j DNAT --to-destination 10.0.0.10:22

Nó đã không làm việc. Sau đó, tôi nhận ra rằng chính sách của FORWARD là CHẤP NHẬN, có một quy tắc chặn tất cả các FORWARD.

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 ACCEPT     all  --  *      virbr0  0.0.0.0/0            10.0.0.0/24          ctstate RELATED,ESTABLISHED
    0     0 ACCEPT     all  --  virbr0 *       10.0.0.0/24          0.0.0.0/0           
    0     0 ACCEPT     all  --  virbr0 virbr0  0.0.0.0/0            0.0.0.0/0           
    5   268 REJECT     all  --  *      virbr0  0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable
    0     0 REJECT     all  --  virbr0 *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable

Vì vậy, tôi đã phải tiêm quy tắc ở đầu:

iptables -I FORWARD -p tcp -d 10.0.0.10 --dport 22 -j ACCEPT

Bây giờ chuyển tiếp host:81-> 10.0.0.10:22hoạt động.


-2

Container của bạn có thể truy cập từ LAN thông qua giao diện cầu nối máy chủ và do đó được kết nối với cùng mạng con với máy chủ.

Bạn cần phải có bộ định tuyến của bạn chuyển tiếp các cổng đến container của bạn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.