Chuyển tiếp lưu lượng truy cập từ thiết bị TUN (phụ trợ C ++) đến cổng mặc định


10

Vấn đề sau đây chỉ là một phần của giải pháp lớn hơn mà tôi có vấn đề. Tất cả các yếu tố khác dường như hoạt động cho đến nay, vì vậy tôi sẽ cố gắng mô tả phần rất nhỏ mà tôi gặp vấn đề.

Tôi đã có một máy linux, với tun0 (giao diện đường hầm) và eth0 (phù thủy là cổng mặc định của tôi vào internet).

Mục tiêu: mục tiêu của tôi là nhận các gói đến từ tun0 và chuyển tiếp chúng đến cổng mặc định. Vì vậy, trường hợp NAT thực sự khá đơn giản, nơi tôi muốn "chia sẻ" internet với tun0 giả mạo giao diện vật lý.

Tun đã được tạo bằng cách sử dụng

sudo openvpn --mktun --dev tun0 --user USER
sudo ip addr add 10.2.0.1/24 dev tun0
sudo ip link set tun0 up

Vì vậy, tôi có nó và chạy, tôi có thể ping nó, v.v. Hơn nữa, tôi có ứng dụng C ++, gắn với thiết bị TUN này, có thể đọc và ghi vào nó. (fti: đây là hướng dẫn tôi đã theo dõi: http://backreference.org/2010/03/26/tuntap-interface-tutorial/ )

Tôi đã bỏ một số yêu cầu ICMP (ping) chính xác được thực hiện đến 8.8.8.8 vào mảng byte trong C ++. Bây giờ, sử dụng chương trình của tôi, tôi viết nó cho thiết bị tun0. Yêu cầu ICMP có

  • nguồn (10.2.0.10) - vì vậy kernel biết tuyến đường trở lại (cùng mạng con)
  • đích (8.8.8.8) - DNS của Google
  • tổng kiểm tra chính xác, v.v. (trong Wireshark / TShark, nó xuất hiện chính xác trên tun0)

Sau đó, tôi có các tuyến đường sau:

iptables -F # flush
iptables --table nat --append POSTROUTING --out-interface eth0 -j MASQUERADE
iptables --append FORWARD --in-interface tun0 -j ACCEPT

Và ở đây tôi bị kẹt :( Gói không được chuyển tiếp đến gw mặc định (tshark chỉ nhìn thấy nó trên tun0 khi nhận được mà tôi đoán là chính xác)

Cái gì còn thiếu? Có thể một số cách tiếp cận khác (nhưng nó phải được thực hiện bằng cách sử dụng thiết bị tun, và tôi phải có khả năng r / w với nó). Thông tin bổ sung:

  • chuyển tiếp được bật (/ Proc / sys / net / ipv4 / ip_forward)
  • Có thể truy cập 8.8.8.8 thông qua eth0 (từ địa phương)
  • cổng mặc định là chính xác (từ ISP qua eth0)
  • Tôi đã thử tắt rp_tables (echo 0> / Proc / sys / net / ipv4 / conf / eth5 / rp_filter)
  • và nhiều người khác ...

Cảm ơn trước cho bất kỳ gợi ý!


Tôi biết điều này đã hơn một năm tuổi, nhưng bạn đã đến bất cứ nơi nào với điều này? Tôi có chính xác cùng một vấn đề.
hplbsh

Câu trả lời:


1

Giải pháp thay thế sẽ là sử dụng bridge. Vì vậy, bạn có thể kết nối tun0 của mình với eth0 và không cần phải cài đặt ip trên tun0, bạn chỉ cần đặt IP từ cùng một mạng con của eth0 và cùng một cổng bạn đang sử dụng ngay trên giao diện đường hầm của khách hàng.

Các lệnh để thiết lập một cây cầu lên:

# brctl addbr br0
# brctl addif br0 eth0 tun0

www.tldp.org/HOWTO/BRIDGE-STP-HOWTO/set-up-the-bridge

Để sử dụng brctl bạn phải cài đặt bridge-utilsgói.
Nếu bản phân phối của bạn là Ubuntu:aptitude install bridge-utils


1

Gần đây tôi đã gặp phải vấn đề này (theo cùng một bài viết được đề cập trong câu hỏi) và sau khi loay hoay một chút, tôi thấy rằng lệnh sau cho phép chuyển tiếp cục bộ các gói cho thiết bị điều chỉnh.

echo 1 > /proc/sys/net/ipv4/conf/tun0/accept_local

Tôi biết nó rất muộn, tôi chỉ đăng bài ở đây để bất kỳ ai gặp phải vấn đề tương tự cũng có thể có một số loại trợ giúp.

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.