Làm cách nào tôi có thể đặt hộp linux của mình làm bộ định tuyến để chuyển tiếp các gói ip?


25

Tôi đang thực hiện một thử nghiệm mạng về chuyển tiếp gói ip, nhưng tôi không biết tại sao nó hoạt động.

Tôi có một máy linux với hai giao diện mạng, eth0 và eth1 đều có địa chỉ IP tĩnh (eth0: 192.168.100.1, eth1: 192.168.101.2).

Mục tiêu của tôi rất đơn giản, tôi chỉ muốn chuyển tiếp các gói ip từ eth1 với đích trong mạng con 192.168.100.0/24 đến eth0 và chuyển tiếp các gói ip từ eth0 với đích trong mạng con 192.168.101.0/24 đến eth1.

Tôi đã bật chuyển tiếp ip với:

sysctl -w net.ipv4.ip_forward=1

bảng định tuyến của tôi là như thế này:

# route -n
Kernel IP routing table
Destination     Gateway     Genmask        Flags Metric Ref   Use  Iface
192.168.100.0   0.0.0.0     255.255.255.0  U     0      0       0  eth0
192.168.101.0   0.0.0.0     255.255.255.0  U     0      0       0  eth1

Nhưng, khi tôi cố gắng ping từ 192.168.100.25 đến 192.168.101.47, nó không hoạt động.

Câu trả lời:


23

Bạn cần thêm quy tắc chuyển tiếp bằng iptableslệnh, đại loại như thế này:

modprobe iptable_nat
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -A FORWARD -i eth1 -j ACCEPT

xem man iptablesđể biết thêm chi tiết hoặc tìm kiếm trên internet các bài viết hướng dẫn, ví dụ Cách thiết lập bộ định tuyến NAT trên máy tính chạy Linux

Dưới đây là Linux IP Superman HOWTO thảo luận chi tiết về chủ đề này.

Bạn cũng nên đảm bảo rằng bạn không có quy tắc nào khác (ví dụ trong FORWARDchuỗi) đang ghi đè ACCEPTquy tắc trên . Nếu có, có lẽ bạn muốn xóa chúng.


Tôi không biết tại sao, nhưng nó vẫn không hoạt động. Tôi đã thêm cả hai iptables -A FORWARD -i eth0 -o eth1 -j ACCEPTiptables -A FORWARD -i eth1 -o eth0 -j ACCEPTvào bảng của tôi. Và chính sách INPUT, OUTPUT và FORWARD của tôi là tất cả ACCEPT.
Yishu Fang

Có nhiều thứ có thể được cấu hình sai. Ví dụ: IP của máy chủ của bạn phải được chỉ định là "IP gateway" trên các máy chủ trong mạng "nội bộ", để họ biết rằng nếu một IP không nằm trong phạm vi của mạng "cục bộ" của họ thì các gói cần phải được gửi đến máy cổng. Điều này tương tự như thiết lập thông thường nơi bộ định tuyến ADSL được đăng ký làm cổng cho máy chủ trong mạng LAN
Sergey

Khi tôi sử dụng traceroutetrên máy chủ của mình, nó cho thấy gói đi đến "bộ định tuyến" (192.168.100.1), nhưng nó không đi xa hơn.
Yishu Fang

1
@UniMouS: Có vẻ như tôi đã quên về điều MASQUERADE - Tôi đã chỉnh sửa câu trả lời của mình và thêm các liên kết mới vào bài viết.
Serge

2

Bạn cần thêm một tuyến đường cho cả 192.168.100.25 và 192.168.101.47.

Nếu máy chủ chuyển tiếp của bạn có IP 192.168.100.1 và 192.168.101.1, bạn sẽ thêm vào máy khách 192.168.100.25

ip route 192.168.101.0/24 via 192.1268.100.1

và trong ứng dụng khách 192.168.101.47

ip route 192.168.100.0/24 via 192.168.101.1

(Điều này hoạt động với chỉ chuyển tiếp kích hoạt, không có iptables).

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.