Chuyển tiếp tới máy khách VPN?


21

Tôi đã gặp một chút câu đố và không gặp nhiều may mắn khi tìm ra giải pháp. Ngay bây giờ tôi (đáng buồn) kết nối với mạng thông qua Verizon 3G. Họ lọc tất cả lưu lượng truy cập đến để tôi không thể mở cổng để chấp nhận kết nối.

Tôi hiện đang có một máy ảo Linux tại linode.com và ý nghĩ đã xuất hiện trong đầu tôi để cài đặt pptpdvà cố gắng thực hiện một số iptableschuyển tiếp cổng. Tôi đã pptpdcài đặt và máy gia đình của tôi kết nối hạnh phúc. Điều đó nói rằng, đây là một số thông tin chung:

Máy chủ (Debian) WAN IP: xxxx trên eth0 - pptpd IP: yyy1 trên ppp0 - IP VPN của máy khách: yyy100

Để xác minh rằng tôi không phát điên, tôi đã thử một số kết nối từ máy chủ đến các cổng mở trên máy khách và máy khách chấp nhận các kết nối qua VPN IP.

Những gì tôi muốn thực hiện là điều này:

Internet -> IP IP: Cổng -> Chuyển tiếp tới máy khách VPN IP: Cổng

Vì vậy, ví dụ, nếu tôi mở cổng 6000 trên máy khách của mình, một người có thể telnet tới xxxx: 6000 và máy chủ sẽ bắt được điều đó và chuyển nó tới 192.168.3.100:6000.

Tôi đã thử ít nhất 20 cấu hình Googled khác nhau iptablesvà chưa có cấu hình nào hoạt động. Có ai có bất kỳ ý tưởng nào, hoặc thậm chí có thể là một cách tiếp cận hoàn toàn khác mà tôi có thể không nhận ra? Mục tiêu ở đây là lắng nghe thông qua một kết nối được tường lửa khủng khiếp, tốt nhất là cả lưu lượng TCP và UDP.

Câu trả lời:


25

Bạn cần thực hiện ba điều trên máy chủ VPN của mình (Linode) để thực hiện công việc này:

  1. Bạn phải bật chuyển tiếp IP:

    sysctl -w net.ipv4.ip_forward=1
    
  2. Thiết lập NAT đích (DNAT) để chuyển tiếp cổng. Có lẽ bạn đã tìm ra điều này bởi vì đó là công cụ chuyển tiếp cổng tiêu chuẩn, nhưng để hoàn thiện:

    iptables -t nat -A PREROUTING -d x.x.x.x -p tcp --dport 6000 -j DNAT --to-dest y.y.y.100:6000
    
  3. Thiết lập NAT nguồn (SNAT) để từ phối cảnh máy khách VPN của bạn, kết nối đến từ máy chủ VPN:

    iptables -t nat -A POSTROUTING -d y.y.y.100 -p tcp --dport 6000 -j SNAT --to-source y.y.y.1
    

Lý do bạn cần SNAT là vì nếu không, máy khách VPN của bạn sẽ gửi các gói trả về của nó tới máy chủ khởi tạo kết nối (zzzz) thông qua cổng mặc định của nó (tức là Verizon 3G) chứ không phải qua VPN. Do đó, địa chỉ IP nguồn trên các gói trả về sẽ là địa chỉ 3G Verizon của bạn chứ không phải xxxx Điều này gây ra tất cả các loại vấn đề, vì zzzz thực sự đã bắt đầu kết nối tới xxxx

Trong hầu hết các thiết lập chuyển tiếp cổng, SNAT không cần thiết vì máy chủ thực hiện chuyển tiếp cổng cũng là cổng mặc định cho máy chủ đích (ví dụ: bộ định tuyến gia đình).

Cũng lưu ý rằng nếu bạn muốn chuyển tiếp cổng 6000 sang một cổng khác (giả sử 7000), thì quy tắc SNAT phải khớp với 7000 chứ không phải 6000.


Xin chào AGWA, Cảm ơn bạn đã phản hồi. Tôi đã có ip_forwarding trên và quy tắc của bạn hoạt động hoàn hảo, mặc dù không phải ban đầu. Vấn đề là (trong iptables noobness của tôi) mà tôi đã không nhận ra iptables -F đã không xóa các mục nhập nat và iptables -L không liệt kê chúng. Sau khi tìm ra cách liệt kê chúng một cách chính xác, tôi nhận thấy một số mục mâu thuẫn từ các lần thử trước đó. Sau khi xả nước và thử các quy tắc của bạn, nó hoạt động hoàn hảo. Một câu hỏi nhanh, mặc dù trong quy tắc của bạn, bạn chỉ định tcp. Sẽ thay đổi điều này thành "tất cả" hoạt động cho cả lưu lượng TCP / UDP?
Brigileier

Không có gì! (Bằng cách này, tôi như sử dụng iptables-saveđể hiển thị quy tắc iptables của tôi - trong khi đầu ra không có ý định cho con người nó vẫn còn có thể đọc được và hiển thị tất cả . Quy tắc iptables của bạn) Không, không may bạn không thể sử dụng "tất cả" đó, vì --dportchỉ hoạt động với các giao thức thực sự có cổng ("tất cả" sẽ bao gồm ICMP, không có khái niệm về cổng). Bạn sẽ cần các quy tắc riêng cho TCP và UDP.
AGWA

Cảm ơn các mẹo iptables-save. Mọi thứ hoạt động như mong đợi cho cả TCP và UDP. Chúc mừng.
Brigileier

2
Chỉ cần một bản cập nhật cho câu trả lời này là với iproute2, bạn thực sự có thể thiết lập máy khách VPN của mình để có 2 cổng và định tuyến lưu lượng truy cập DNAT qua VPN. Điều này có lợi nếu bạn không muốn sử dụng SNAT và tất cả lưu lượng truy cập dường như đến từ máy chủ vpn. thomas-krenn.com/en/wiki/Two_Default_Gateways_on_One_System bao gồm thông tin về cách thiết lập điều này.
Nhấn

Hoạt động với tôi miễn là ufw bị vô hiệu hóa, mặc dù tôi đã cho phép 8080 trong ufw, nhưng ngay khi tôi bật ufw, công cụ chuyển tiếp này không hoạt động .. có ý kiến ​​gì không?
Sudhir N

3

Tôi cũng gặp vấn đề này và đã cố gắng giải quyết nó trong nhiều giờ .. Đây là giải pháp của tôi:

  • Tôi đã có nhiều hơn một VPNClientvới cùng IPAddress. Vì vậy, tôi đã cho mỗi người một tĩnhIPAddress

Xác định một thư mục nơi các tập lệnh máy khách sẽ được lưu trữ, ví dụ / etc / openvpn / staticclents và tạo thư mục

mkdir /etc/openvpn/staticclients

Thêm thư mục này dưới dạng tùy chọn vào tệp cấu hình openvpn của bạn tại máy chủ:

client-config-dir /etc/openvpn/staticclients

Đối với mỗi khách hàng, bạn phải tạo một tập tin. Tên tệp phải khớp với common namethuộc tính đã được chỉ định tại chứng chỉ của máy khách. Lệnh này lấy CN từ chứng chỉ máy tính:

Ví dụ này đẩy IPAddress10.1.134.110/10.1.134.109 đến Máy khách với common name TESTCLIENT và cũng đẩy một tuyến bổ sung cho mạng con 10.1.135.0.

cat /etc/openvpn/staticclients/TESTCLIENT

ifconfig-push 10.1.134.110 10.1.134.109
push "route 10.1.135.0 255.255.255.0 10.1.134.62"
  • http://www.yougetsignal.com/tools/open-ports/http://canyouseeme.org/ đã không phát hiện chính xác các cổng. Tôi đã phải khởi động thêm ứng dụng của mình trên máy khách, rằng các trang web có thể thấy các cổng này.

  • Không cần các SNATquy tắc bổ sung . Chỉ những quy tắc này là cần thiết:

sysctl -w net.ipv4.ip_forward=1

iptables -t nat -A PREROUTING -p tcp --dport 28006 -j DNAT --to 10.1.134.110

2

Hầu hết các máy chủ có chuyển tiếp ip bị vô hiệu hóa trong cấu hình mặc định. Bạn cần kích hoạt nó nếu bạn muốn chuyển hướng các kết nối đến thông qua VPN của mình.

Thử đi:

sysctl -w net.ipv4.ip_forward = 1

Ý tôi là ngoài cấu hình iptables.


0

Những gì bạn muốn đạt được là (rất có thể) rất có thể với pptpdhoặc OpenVPN và iptables, tuy nhiên, bạn có thể thấy tinc là ứng cử viên tốt hơn cho trường hợp sử dụng này. Tôi chỉ đọc cái này mô tả cách thiết lập tinc cho chính xác trường hợp sử dụng này. Đây là một thay thế (có khả năng đơn giản hơn) cho phần pptdphoặc OpenVPN. Sau đó, bạn cần chính xác các quy tắc tương tự cho 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.