NAT (chia sẻ kết nối Internet) chuyển đổi giữa nhiều giao diện công cộng


7

Máy tính xách tay Ubuntu 12.04 (chính xác) của tôi có ba giao diện mạng:

  1. eth0: giao diện có dây đôi khi được kết nối với Internet
  2. wlan0: giao diện không dây đôi khi được kết nối với Internet
  3. vboxnet0: giao diện có dây (thực ra là giao diện ảo VirtualBox) được kết nối với một máy tính khác (thực ra là máy ảo VirtualBox có kết nối mạng ở chế độ chỉ lưu trữ)

Tôi muốn sử dụng iptablesđể thiết lập giả mạo NAT / IP để chia sẻ bất kỳ kết nối Internet nào (thích kết nối có dây nếu cả hai đều hoạt động) với máy tính khác.

Các công việc sau đây eth0được cắm vào:

echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward &&
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE &&
sudo iptables -A FORWARD -i eth0 -o vboxnet0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT &&
sudo iptables -A FORWARD -i vboxnet0 -o eth0 -j ACCEPT

Nếu tôi chuyển từ có dây sang không dây, điều này rõ ràng sẽ ngừng hoạt động.

Tôi đã thử:

echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward &&
sudo iptables -t nat -A POSTROUTING -o '!vboxnet0' -j MASQUERADE &&
sudo iptables -A FORWARD -i '!vboxnet0' -o vboxnet0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT &&
sudo iptables -A FORWARD -i vboxnet0 -o '!vboxnet0' -j ACCEPT

nhưng nó không hoạt động. Tôi có thể thử thực hiện một số tập lệnh Trình quản lý mạng để thay đổi iptablesquy tắc bất cứ khi nào giao diện tăng hoặc giảm, nhưng tôi đoán rằng sẽ có thể thực hiện được mà không cần phải nhảy qua các vòng như vậy.

Bất kỳ đề xuất?

Câu trả lời:


4

Đơn giản

Đây là một iptablesquy tắc rất đơn giản mà giả mạo mọi thứ. Điều này làm việc cho nhiều thiết lập đơn giản hơn. Nó sẽ không hoạt động nếu hộp hoạt động như một bộ định tuyến đầy đủ - nó có một thói quen khó chịu tiềm tàng là NATting tất cả lưu lượng truy cập rời khỏi máy tính của bạn.

iptables -A POSTROUTING -o eth+ -t nat -j MASQUERADE
iptables -A POSTROUTING -o wlan+ -t nat -j MASQUERADE

Đầy

Nếu giải pháp đơn giản không hoạt động hoặc nếu cấu hình của bạn phức tạp hơn, quy tắc này có thể giúp:

NATIF='vboxnet+'
MARK=1
iptables -A PREROUTING -t mangle -i $NATIF -j MARK --set-mark $MARK
iptables -A POSTROUTING -o eth+ -t nat -m mark --mark $MARK -j MASQUERADE
iptables -A POSTROUTING -o wlan+ -t nat -m mark --mark $MARK -j MASQUERADE

Nó đánh dấu các gói đến thông qua bất kỳ vboxnet*giao diện nào , sau đó, sau đó, giả mạo (SNAT) bất kỳ gói nào đi ra eth*hoặc wlan*với bộ đánh dấu.

Cũng thế…

Ngoài các iptablesquy tắc, bạn sẽ cần biến máy tính chủ của mình thành bộ định tuyến bằng cách cho phép chuyển tiếp gói. Đặt:

net.ipv4.ip_forward=1

vào /etc/sysctl.confrồi nói

sudo sysctl -p /etc/sysctl.conf.

Cách khác:

echo 1 | sudo tee /proc/sys/net/ipv4_ip_forward

Khách cũng phải có một tuyến mặc định chuyển các gói thông qua các giao diện bên ngoài của máy chủ (và đối với điều này, rất có thể chế độ chỉ dành cho máy chủ sẽ không hoạt động). Kiểm tra bảng định tuyến của nó (điều này phụ thuộc vào hệ điều hành khách).

Ngoài ra, cài đặt wiresharkhoặc tsharksử dụng chúng để kiểm tra các gói. Không có cách nào tốt hơn để giải quyết các vấn đề mạng chung như thế này.

Cá nhân, tôi khuyên bạn nên thay đổi khách để sử dụng mạng chế độ bắc cầu và cung cấp cho cả hai giao diện của máy chủ. Sau đó, nó có thể tự kết nối, sử dụng dịch vụ DHCP trên bộ định tuyến của bạn để tự lấy địa chỉ cục bộ. Không cần NAT.


Tôi sẽ cập nhật nó với giải pháp đơn giản hơn, nhưng tôi muốn giữ cả hai nếu bạn không phiền. Phương thức mark-less (sic) hoạt động tốt đối với nhiều cấu hình đơn giản, nhưng không thành công trong các trường hợp phức tạp hơn. Đây là cách đầu tiên tôi bắt đầu sử dụng nó. :)
Alexios

1
không nên $MASK$MARK?
Richard Hansen
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.