iptables rắc rối: nat với ip alias (giao diện ảo) không hoạt động


1

Tôi đang thiết lập máy chủ Ubuntu 11.10 để hoạt động như tường lửa cho mạng chạy một số trang web SSL khác nhau. Ý tưởng khá phổ biến: có tất cả IP công khai cho mỗi trang web được đặt bí danh cho giao diện chung trên tường lửa và sử dụng iptables / NAT để chuyển tiếp kết nối đến các máy chủ web. Tôi đang có một thời gian để có được điều này khá đơn giản để làm việc mặc dù.

Nói rằng tôi có giao diện công khai trên tường lửa:

eth0 25.25.25.25

Và tôi muốn đặt bí danh một IP mới cho giao diện chung đó:

ifconfig eth0:0 25.25.25.26

Sau đó tôi thấy giao diện được tạo và tôi có thể ping nó từ các máy chủ khác. Càng xa càng tốt. Bây giờ tôi có máy chủ web của mình ngồi ở phía DMZ của mạng, có thể truy cập bằng tường lửa nhưng không công khai. Giả sử máy chủ web nội bộ là 172.16.2.1. Vì vậy, tôi tạo một quy tắc NAT như sau:

iptables -t nat -A PREROUTING -i eth0 -d 25.25.25.26 -j DNAT - đến đích 172.16.2.1

Nó chỉ không muốn làm việc. Nếu tôi chạy tcpdump trên giao diện công cộng, nó sẽ thấy lưu lượng truy cập đến, nhưng iptables sẽ không NAT nó đến đích.

Nó sẽ hoạt động tốt nếu tôi sử dụng IP không có bí danh, chẳng hạn như 25.25.25.25. Tôi đã đọc rằng iptables không thích làm việc với các giao diện ảo và bỏ qua chúng. Điều đó tốt, nhưng nó vẫn nên hoạt động với "eth0" thay vì "eth0: 0". Trong trường hợp của tôi, iptables không phàn nàn nếu tôi cố gắng sử dụng "eth0: 0" nhưng nó không tạo ra sự khác biệt nào.

Tôi đã sử dụng OpenBSD từ lâu rồi, vì vậy tôi rất thoải mái khi thiết lập điều tương tự với pf. Nhưng nhiều năm trước tôi đã từng làm điều này với một hộp RedHat và nó hoạt động rất tốt. Có điều gì đó đã thay đổi? Phải có một cách để làm điều này. Tôi đã thấy một số ví dụ từ những người khác nói rằng bạn chỉ cần đảm bảo rằng bạn chỉ định thiết bị chính (eth0) thay vì sử dụng eth0: 0. Nhưng tôi chẳng có gì cả.

Ồ, và để loại trừ rằng đây chỉ là sự cố lọc, tôi đã vô hiệu hóa hoàn toàn tất cả các quy tắc bộ lọc:

iptables -F
iptables -X
iptables -P FORWARD ACCEPT
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT

Có ý kiến ​​gì không? Tôi chắc chắn không có người mới khi nói đến iptables, nhưng vấn đề này đang bắt đầu khiến tôi cảm thấy như một.

Câu trả lời:


2

Khi bạn sử dụng giao diện ảo, chỉ cần sử dụng tùy chọn -d (đích), bỏ qua tùy chọn -i (giao diện)

Thay vì:
iptables -t nat -A PREROUTING -i eth0 -d 25.25.25.26 -j DNAT --to-destination 172.16.2.1

sử dụng:
iptables -t nat -A PREROUTING -d 25.25.25.26 -j DNAT --to-destination

Làm việc với iptables v1.4.14 trong Debian


-1

Nhiều khả năng bạn sẽ cần sử dụng chuỗi chuyển tiếp và không cung cấp giao diện đầu vào cho điều đó:

iptables -t nat -A PREROUTING -i eth0 -d 25.25.25.26 -j DNAT --to-destination 172.16.2.1

Hãy thử nó theo cách này:

iptables -t nat -A FORWARD -d 25.25.25.26 -j DNAT --to-destination      172.16.2.1

Điều này hoạt động với tôi cả trên Debian / Ubuntu và các bộ định tuyến dựa trên iptables như MikroTik. Bạn cũng có thể xem ở đây về chuyển tiếp cổng, nó cũng có thể hữu ích.


Các FORWARDchuỗi là không một phần của natbảng. Đề xuất 'chỉnh sửa' của bạn sẽ không được chấp nhận bởi iptables- thay vào đó, nó sẽ cung cấp cho bạn một thông báo lỗi.
Larssend

Ngoài ra, DNAT chỉ hợp lệ cho PREROUTINGOUTPUTchuỗi. Vui lòng tránh giới thiệu bất cứ điều gì bạn không thực sự biết.
Larssend
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.