প্রসঙ্গ
আমি কাইল মান্না ( https://github.com/kylemanna/docker-openvpn ) থেকে খুব ভাল ডকার ধারক ব্যবহার করছি । আমি আমার ওপেনভিপিএন সার্ভার সেট আপ করার জন্য তথাকথিত "ভৌতিক" ডকুমেন্টেশন ব্যবহার করছি, তবে আমার দৃষ্টিতে এটি স্ট্যান্ডার্ড উপায় হওয়া উচিত এবং ভৌতিক উপায় নয়।
কনফিগারেশন
নির্বাচিত ডকার পাত্রে এবং ভিপিএন ক্লায়েন্টদের মধ্যে দ্বি-দিকনির্দেশক সংযোগের অনুমতি দেওয়ার জন্য আপনাকে একটি ডকার নেটওয়ার্ক তৈরি করতে হবে যার উপর আপনি কনটেইনার সংযুক্ত করতে চলেছেন যা ভিপিএন ক্লায়েন্টদের অ্যাক্সেস করার অনুমতি দেওয়া উচিত। ভিপিএন সার্ভার সেই ধারকগুলির মধ্যে একটি হতে চলেছে।
VPN এর সার্ভার থাকা উচিত client-to-client
, topology subnet
, dev tun0
(অথবা অন্যান্য Tun ডিভাইস) এবং push "route <docker net IP> <docker net mask>"
কনফিগার করা হয়েছে।
ভিপিএন সার্ভারের হোস্টকে আইপি প্যাকেটগুলি একটি সাবনেট থেকে অন্য সাবনেট করার জন্য সমর্থন করতে কনফিগার করা উচিত। এর অর্থ সিস্টেমে আইপ_ফরওয়ার্ডটি 1-এ সেট করা (আপনার যদি ডকার ইনস্টল করা থাকে তবে এটি হওয়া উচিত), টিউন ডিভাইস থেকে প্যাকেটগুলি iptables ফরওয়ার্ড চেইন দিয়ে যাওয়ার অনুমতি দেয় এবং যথাযথ রাউটিং সেট করে। এই কমান্ডগুলির সাথে সংক্ষিপ্তসার করা যেতে পারে:
$ sudo sysctl -w net.ipv4.ip_forward=1
$ sudo iptables -A FORWARD -i tun+ -j ACCEPT
$ sudo ip route add 192.168.255.0/24 via <IP address of OpenVPN server container>
যাইহোক, সার্ভার সেট আপ করার জন্য আমি এখানে অপশনগুলি ব্যবহার করেছি:
$ docker run --rm --net=none -it -v $PWD/files/openvpn:/etc/openvpn kylemanna/openvpn:2.4 ovpn_genconfig -u udp://<FQDN> -N -d -c -p "route <docker net IP> <docker net range>" -e "topology subnet"
এটির মতো একটি সার্ভার কনফিগারেশন ফাইল তৈরি করা উচিত:
server 192.168.255.0 255.255.255.0
verb 3
key /etc/openvpn/pki/private/vpn.example.com.key
ca /etc/openvpn/pki/ca.crt
cert /etc/openvpn/pki/issued/vpn.example.com.crt
dh /etc/openvpn/pki/dh.pem
tls-auth /etc/openvpn/pki/ta.key
key-direction 0
keepalive 10 60
persist-key
persist-tun
proto udp
# Rely on Docker to do port mapping, internally always 1194
port 1194
dev tun0
status /tmp/openvpn-status.log
user nobody
group nogroup
client-to-client
### Push Configurations Below
push "dhcp-option DNS 8.8.8.8"
push "route 172.20.20.0 255.255.255.0"
### Extra Configurations Below
topology subnet
কংক্রিট উদাহরণ
আমি এখন একটি দৃ concrete় উদাহরণ নেব। এই উদাহরণে, আমি হোস্ট vpn.example.com উপর ডকারের ভিতরে উল্লিখিত ওপেনভিপিএন সার্ভারটি চালাব will এই ধারকটি ডকার নেটওয়ার্ক ডকার-নেট-ভিপিএন-এর সাথে সংযুক্ত। এখানে কমান্ডগুলি দেওয়া হয়েছে (এই উদাহরণস্বরূপ আমি সরাসরি সার্ভারে সার্ভার কনফিগারেশন উত্পন্ন করি এবং আমি সিএ জেনারেশনটি এড়িয়ে যাই, দয়া করে পরিবর্তে উপরোক্ত উল্লিখিত প্রকল্পের ভৌতিক ডকুমেন্টেশনটি অনুসরণ করুন):
$ docker network create --attachable=true --driver=bridge --subnet=172.20.20.0/24 --gateway=172.20.20.1 docker-net-vpn
$ docker run --rm --net=none -it -v $PWD/files/openvpn:/etc/openvpn kylemanna/openvpn:2.4 ovpn_genconfig -u udp://vpn.example.com -N -d -c -p "route 172.20.20.0 255.255.255.0" -e "topology subnet"
$ docker run --detach --name openvpn -v $PWD/files/openvpn:/etc/openvpn --net=docker-net-vpn --ip=172.20.20.2 -p 1194:1194/udp --cap-add=NET_ADMIN kylemanna/openvpn:2.4
$ sudo sysctl -w net.ipv4.ip_forward=1
$ sudo iptables -A FORWARD -i tun+ -j ACCEPT
$ sudo ip route add 192.168.255.0/24 via 172.20.20.2
প্রথম কমান্ড একটি উত্সর্গীকৃত নতুন ডকার নেটওয়ার্ক তৈরি করে যা একটি নতুন সাবনেট সংজ্ঞায়িত করে। আমরা এই নেটওয়ার্কের সাথে ওপেনভিপিএন সার্ভারটি সংযুক্ত করব।
দ্বিতীয়টি 1 ম কমান্ডে বর্ণিত একই সাবনেটটি ব্যবহার করে ওপেনভিপিএন কনফিগারেশন তৈরি করে।
তৃতীয়টি ওপেনভিপিএন সার্ভার তৈরি করে। এটি সদ্য নির্মিত ডকার নেটওয়ার্কের সাথে সংযুক্ত এবং একটি ফিক্স আইপি ব্যবহার করে।
চতুর্থ এবং পঞ্চম কমান্ডগুলি আইপি ফরওয়ার্ডিং কনফিগার করে।
শেষ কমান্ডটি ওপেনভিপিএন কনটেইনার ফিক্সড আইপি দিয়ে ভিপিএন ক্লায়েন্ট কনফিগারেশনের দিকে একটি নতুন রুট যুক্ত করে।
বিঃদ্রঃ
আমি এটি চেষ্টা করি নি, তবে iptables এর জন্য ফরওয়ার্ড নিয়ম সীমাবদ্ধ করা উচিত। ডকার নেটওয়ার্ক তৈরির ফলে একটি নতুন ব্রিজ ডিভাইস তৈরি হয়েছে। এই ব্রিজটির নাম দেওয়া br-<ID>
হয়েছে আইডিটির সাথে ডকার নেটওয়ার্ক আইডির প্রথম 12 টি অক্ষর। এই আইডি দিয়ে প্রাপ্ত করা যেতে পারে docker network inspect -f '{{.Id}}' docker-net-vpn | cut -b-12
। অতএব নিম্নলিখিত কমান্ডটি আরও বিধিনিষেধযুক্ত (এত ভাল সুরক্ষার ভিত্তিতে) তবে তবুও আমাদের ট্র্যাফিকটি রুট করার অনুমতি দেওয়া উচিত:
$ NET_VPN_BRIDGE="br-$(docker network inspect -f '{{.Id}}' docker-net-vpn | cut -b-12)"
$ sudo iptables -A FORWARD -i tun+ -o ${NET_VPN_BRIDGE} -j ACCEPT
tap
, বাদামtun
, আমি এখন পর্যন্ত কোনও সাফল্য ছাড়াই আরও 12 ঘন্টা ধরে এটি নিয়ে কাজ করে যাচ্ছি।