হোস্ট টানেল ইন্টারফেসে ডক পাত্রে ওপেনভিপিএন ক্লায়েন্টের সাথে সংযোগ স্থাপনের অনুমতি দিন


12

আমার নিম্নলিখিত সেটআপ আছে:

  • একটি সেন্টস হোস্ট ডকার পরিষেবা চালাচ্ছে
  • একজন ব্যবহারকারী সংজ্ঞায়িত ডকার ব্রিজ নেটওয়ার্ক
  • 2 ব্যবহারকারীর সংজ্ঞায়িত সেতু নেটওয়ার্কের সাথে সংযুক্ত ডকার পাত্রে
  • একটি ওপেনভিপিএন ইনস্টলেশন (বর্তমানে হোস্টে চলছে a ডক পাত্রেও চালানো যেতে পারে)
  • কিছু ক্লায়েন্ট ওপেনভিপিএন-এর সাথে সংযুক্ত রয়েছে

আমি ডকার ব্রিজ নেটওয়ার্কের ডকার পাত্রে টিউন নেটওয়ার্কে ওপেনভিএনএন ক্লায়েন্টের সাথে যোগাযোগের জন্য কীভাবে অনুমতি দেব?

আমি ডকার 1 (10.10.0.3) এবং ভিপিএন (172.19.0.x রেঞ্জ) এর সাথে সংযুক্ত ক্লায়েন্টদের মধ্যে স্বচ্ছ উপায়ে টিসিপি ভিত্তিক যোগাযোগ করতে সক্ষম হতে চাই।

ডকার (নেটওয়ার্কিং / iptables / ...) পাশে এবং হোস্টে (iptables?) সেটআপ করার জন্য আমার কী দরকার?


1
হতে পারে দেরীতে, তবে আপনার ক্ষেত্রে আমি বিশ্বাস করি যে আপনার প্রয়োজন tap, বাদাম tun, আমি এখন পর্যন্ত কোনও সাফল্য ছাড়াই আরও 12 ঘন্টা ধরে এটি নিয়ে কাজ করে যাচ্ছি।
মোহাম্মদ নুরাল্ডিন

@ মোহাম্মাদ নূরল্ডিন ​​আপনি কি ছেলেরা এর সমাধান খুঁজে পেয়েছেন? আমি এখন ডিভাইস আলতো চাপতে বিবেচনা করছি। হতাশার বিষয়টি হ'ল ovpn ধারকটির মধ্যে থেকে আমি ভিপিএন ক্লায়েন্টদের অ্যাক্সেস করতে পারি। এবং ভিপিএন ক্লায়েন্টদের কাছ থেকে আমি একই ডকার নেটওয়ার্কের অন্যান্য পাত্রে অ্যাক্সেস করতে পারি। কিন্তু ovpn ধারকটির ভিতরে "eth0" এবং টিউন 0 এর মধ্যে ফরোয়ার্ডিং কাজ করছে না। আমার ধারণা এটি টিউন প্রকৃতির বনাম ট্যাপের কারণে।
হিউজেনস

@ হুইজেনস, হ্যাঁ আমি এটি সমাধান করেছি, দয়া করে একটি পৃথক প্রশ্ন জিজ্ঞাসা করুন এবং আমাকে একটি রেফারেন্স দিন এবং আমি আপনাকে সাহায্য করার জন্য যথাসাধ্য চেষ্টা করব।
মোহাম্মদ নুরাল্ডিন

1
হাই @ মোহাম্মদ নূরল্ডিন ​​আমি এটির জন্য 2 টি অনুপস্থিত নির্দেশ পেয়েছি। তারা ওপেনভিএনপিএন ম্যান পেজে ছিল 👍 আমি শীঘ্রই এই প্রশ্নের উত্তর অন্যদের জন্য পোস্ট করব।
Huygens

1
@ হুইজেনস, এটা জেনে রাখা ভাল, আসলে উত্তরটি পোস্ট করার আমার এখনও সময় হয়নি, তবে আপনার মামলায় কী কাজ করেছে তা দেখতে আগ্রহী।
মোহাম্মদ নুরাল্ডিন

উত্তর:


7

প্রসঙ্গ

আমি কাইল মান্না ( 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

আরে, এটিকে কাজে লাগাতে পারছি না, আমি 192.168.255.6 এ ট্রেসারোট করতে পারি এবং পেয়েছি: 1 gnet (172.20.20.1) 1966.269 ms !H 1966.248 ms !H 1966.239 ms !Hতবে আমি পিং বা খোলা পোর্টগুলিতে পৌঁছতে পারি না।
গাইসফট

হাই @ গুয়াসফট কী ট্রেস্রোয়েট রিপোর্ট করছে তা হ'ল আপনার শেষ হপ (172.20.20.1) হোস্টটি 192.168.255.6 এ পৌঁছতে পারে না। সুতরাং এর অর্থ আপনার রাউটিং টেবিলটি সম্ভবত ভুল। সমস্যাটি কোথায় আছে তা দেখার জন্য আমরা চ্যাট করতে পারি?
হিউজেনস

এটি কাজ শুরু করে, আমি মনে করি কী ঘটবে যে উভয় মেশিনে ডকার ইনস্টল ছিল এবং দু'জনের একটি সাবনেট ছিল 172.20.20.1, যা জিনিসগুলিকে সংঘর্ষে পরিণত করেছিল, ডকারের একটি সাবনেট তৈরি না করার জন্য আমার একটি উপায় খুঁজে বের করা উচিত যা ক্লায়েন্টের মেশিনে সংঘর্ষ হয় would ।
গাইসফট

আপনি যদি ডকার কমপোজ ব্যবহার করেন তবে আপনি আইপি অ্যাড্রেস রেঞ্জটি নির্দিষ্ট করতে পারবেন যা নেটওয়ার্কটি ব্যবহার করা উচিত। রচনা ডকুমেন্টেশন দেখুন। কমান্ড লাইন দিয়ে এটি করাও সম্ভব docker network…
হিউজেনস

আমি মনে করি যে অংশটি হোস্টের সাথে (হোস্ট আইপি + ওপেনভিএনপি পোর্ট) ওপেনভিএনপি কনটেইনারটিতে (172.20.20.2) স্থানান্তরিত হচ্ছে তেমন অংশ পাচ্ছি না
jtomasrl
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.