Định tuyến lưu lượng VPN đi qua proxy minh bạch cục bộ


4

Tôi có một giọt Digital Ocean (tương tự như phiên bản Amazon EC2) đang chạy Ubuntu Server 12.04.3 x64 với cả mạnh mẽ 5.1.1 (được xây dựng từ nguồn) và mực 3.4.2 (cũng được xây dựng từ nguồn) được cài đặt.

Cả VPN mạnh mẽ và chức năng proxy mực chỉ hoạt động tốt, với một số thay đổi quy tắc iptables nhỏ giữa thử nghiệm, tất nhiên.

Những gì tôi muốn làm là có thể bắt đầu kết nối VPN từ máy tính / thiết bị của tôi và có lưu lượng truy cập VPN đi tự động định tuyến thông qua proxy mực cục bộ.

Đó là, lưu lượng giao thông sẽ trông giống như thế này:

Máy khách -> VPN -> Proxy -> Internet

Thật không may, tôi dường như không thể tìm ra một cách tốt để làm cho loại kết nối này hoạt động. Một người bạn đã chỉ ra rằng chuỗi đầu ra của bảng NAT trong iptables có thể là giải pháp của tôi, gợi ý một quy tắc như thế này:

iptables -t nat -A OUTPUT -p tcp --dport 80 -j REDIRECT --to-port 3128

Mặc dù nó hợp lý với tôi về cách thức hoạt động của nó, nhưng nó dường như không làm như vậy. Tôi không thấy bất kỳ gói tin nào tuân theo quy tắc (kiểm tra định kỳ số lượng gói đến / đi bằng lệnh iptables-save) khi tôi cố tải nội dung trong khi kết nối với VPN.

Xin lưu ý bạn, tôi không phải là chuyên gia về iptables hoặc linux, vì vậy xin vui lòng đồng ý với tôi ở đây nếu điều tôi nói (hoặc điều tôi nói) là vấn đề ngớ ngẩn / ngu ngốc / rõ ràng là chết tiệt. ;)

Tôi cởi mở với bất kỳ đề xuất nào về cách giải quyết vấn đề này, nhưng loại bỏ một thành phần không phải là một giải pháp. Tôi cần cả VPN và Proxy chạy như thế này. Thay đổi phiên bản của một trong hai thành phần cũng không lý tưởng, mặc dù khả thi hơn nhiều.

Tôi đã cung cấp cả ipsec.conf và squid.conf, cũng như tập lệnh quy tắc iptables hiện tại của tôi.

PS Nếu bạn để ý, có một số thứ liên quan đến việc sử dụng RADIUS để xác thực. Đừng lo lắng về nó. Nó hiện không được sử dụng và không có bất kỳ ảnh hưởng nào đến câu hỏi này.

tập lệnh iptables:

iptables -F
iptables -t nat -F
iptables -t mangle -F

iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT

export WAN=eth0
export vpnclients=10.100.0.0/255.255.0.0

# Allow access to our SSH server from the WAN
iptables -A INPUT -p TCP --dport ssh -i ${WAN} -j ACCEPT

# Add the rules for NAT
# iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 3128
iptables -t nat -A OUTPUT -p tcp --dport 80 -j REDIRECT --to-port 3128
iptables -t nat -A POSTROUTING -o ${WAN} -j MASQUERADE

iptables-save

ipsec.conf:

config setup
ca ipsec
        cacert=ca.pem
        auto=add

conn %default
        ikelifetime=60m
        keylife=20m
        ike=aes256-sha1-modp1024!
        esp=aes256-sha1!
        leftcert=vpn-server.crt
        leftauth=pubkey
        rightsendcert=never
        leftsendcert=always
        eap_identity=%identity%
        leftfirewall=yes
        auto=add

conn ikev1
        keyexchange=ikev1
        rightauth=pubkey
        rightauth2=xauth
        rightsourceip=10.100.0.0/16
        right=%any
        rightid=%any
        rightdns=8.8.8.8,8.8.4.4
        leftsourceip=<my_server_ip>
        leftsubnet=0.0.0.0/1,128.0.0.0/1,::/1,8000::/1

conn ikev2
        keyexchange=ikev2
        rightsourceip=10.100.0.0/16
        right=%any
        rightid=%any
        rightauth=eap-radius

mực

#dummy name used
cache deny all
forwarded_for off

#for debugging, enable in production
strip_query_terms off

cache_effective_user proxy
cache_effective_group proxy
client_dst_passthru on
host_verify_strict off
http_port 3130 intercept
http_port 3128
https_port 3129 intercept ssl-bump generate-host-certificates=on dynamic_cert_mem_cache_size=4MB cert=/etc/dev/squid.pem

always_direct allow all
ssl_bump server-first all

# the following two options are unsafe and not always necessary:
sslproxy_cert_error allow all
sslproxy_flags DONT_VERIFY_PEER

# Change these to your local DNS servers
dns_nameservers 8.8.8.8 8.8.4.4
coredump_dir /var/cache/squid

http_access allow all
http_reply_access allow all

Rất độc đáo hỏi. Thật sự rất tốt, trên thực tế, tôi đã nghĩ rằng đây là một câu hỏi kiểm toán khi nó được đưa ra qua hàng đánh giá.
Jon

Haha, tôi rất vui mừng khi nghe điều đó! :)
Josh S.

Trong cuốn sách của tôi, đó sẽ là - các cổng, với một s cuối cùng
MariusMatutiae

Thật không may, điều đó dường như không có ích, nhưng cảm ơn vì lời đề nghị! Nhìn xung quanh, tôi thấy mọi người sử dụng lá cờ đó có và không có dấu vết, vì vậy không chắc cái nào đúng. Tôi dường như có được số lượng gói giống nhau (ví dụ: không có hoặc rất ít) bất kể tôi sử dụng loại nào.
Josh S.

Tại sao bạn có PREROUTINGchuỗi nhận xét? Tôi nghĩ rằng nó sẽ làm việc và không phải là OUTPUTchuỗi. Ngoài ra, tôi điều gì xảy ra nếu bạn thử cổng 3130 thay vì 3128? Vì vậy, tôi sẽ thửiptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 3130
prateek61

Câu trả lời:


1

Tôi đã có cùng một vấn đề, và sau gần 1 ngày, tôi có thể giải quyết vấn đề này. Giải pháp này dành cho bất cứ ai đọc điều này trong tương lai.

Mục tiêu: Giống như OP tôi đang cố gắng đạt được

Máy khách -> VPN -> Proxy -> Internet

Thiết lập: Ubuntu 16.04

VPN: L2TP sử dụng xl2tpd và pptpd, cũng như mạnh mẽ để mã hóa Thiết lập VPN và máy chủ Squid Proxy nằm trên cùng một máy.

Nhóm IP riêng để phân phát IP cho khách hàng: 172,21.118.0 / 24

Như OP mong đợi, bạn cần chạy -j REDIRECT --to-port 3128trên một số bảng nat (hoặc PREROUTING hoặc OUTPUT).

Theo dõi và đăng nhập xung quanh với các bảng khác nhau, đây là đường dẫn mỗi gói có nguồn gốc từ 172,21.118.0/24 như sau:

Mangle PREROUTING -> nat PRERout

Tôi hiểu cách thức hoạt động của nó, sử dụng một minh họa tuyệt vời về vòng đời gói iptables:

nhập mô tả hình ảnh ở đây Nguồn: http://64-bit.de/dokumentationen/netzwerk/e/002/DE-IPTABLES-HOWTO-3.html

Khi nó bật ra, thiết lập này không gửi bất cứ thứ gì trên chuỗi OUTPUT, vì vậy nơi duy nhất để chuyển hướng một cổng là chuỗi PREROUTING.

Các giải pháp đơn giản là:

iptables -t nat -I PREROUTING  -i ppp0 -s 172.21.118.1/24 -j REDIRECT --to-ports 3128

Cũng đừng quên SNAT tới IP công cộng của bạn để truy cập internet:

iptables -t nat -A POSTROUTING -j SNAT -s 172.21.118.2/24 --to-source ${IP} -o eth0
#Alternatively but slower:
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
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.