সমস্যা
একটি VPN খুলুন সার্ভার উদাহরণস্বরূপ ( tun
, udp
, পোর্ট 1194
) লিনাক্স ভিত্তিক রাউটার যে এছাড়াও একটি VPN খুলুন ক্লায়েন্ট উদাহরণস্বরূপ (রান সেট আপ করা হয় tun
, udp
, পোর্ট 1197
) এটিকে একটি VPN প্রদানকারী সাথে সংযুক্ত হচ্ছে। ক্লায়েন্ট এবং সার্ভার উভয়ই পৃথকভাবে সূক্ষ্মভাবে কাজ করে । তবে, ভিপিএন ক্লায়েন্ট ইনস্ট্যান্স সক্ষম থাকলে ক্লায়েন্টরা ভিপিএন সার্ভারের সাথে সংযোগ করতে পারে না।
আমি নিশ্চিত যে এটি ঘটেছে কারণ ভিপিএন ক্লায়েন্ট উদাহরণটি main
রাউটিং টেবিলটি সংশোধন করে যাতে ( OUTPUT
) এবং FORWARD
রাউটারের মাধ্যমে সমস্ত ট্রাফিক ভিপিএন সরবরাহকারীর কাছে যায়। এটি পছন্দসই ডিফল্ট আচরণ, তবে ইন্টারনেট থেকে শুরু হওয়া সংযোগগুলির জন্য নয়।
ব্যবহার করে iptables
এবং / অথবা ip
, কীভাবে একটি রাউটিং নীতি সেট আপ করা যায় যাতে ইন্টারনেট থেকে শুরু করা সমস্ত (বা কমপক্ষে ভিপিএন) সংযোগগুলি স্ট্যান্ডার্ড ডিফল্ট গেটওয়ে ( 192.168.1.1
) দিয়ে রাউটে যায় ?
সেটআপ
LINUX ROUTER
-----------------------------------------
| LAN if: br-lan, 192.168.2.1/24 |
| VPN client if: tun0, 10.63.10.6/32 |
| VPN server if: tun1, 10.255.0.1/24 |
| DMZ if: eth0, 192.168.1.2/24 |
-----------------------------------------
|
GATEWAY ROUTER |
--------------------------
| DMZ if: 192.168.1.1/24 |
| WAN if: x.x.x.x/x |
--------------------------
|
INTERNET | VPN CLIENT OF LINUX ROUTER (public IP: y.y.y.y/y)
----------------- --------------------------------------
| |----| VPN client if: tun1, 10.255.0.6/24 |
----------------- --------------------------------------
|
|
VPN PROVIDER OF LINUX ROUTER
--------------------------------
| VPN server if: 10.63.10.1/32 |
--------------------------------
আপনি লক্ষ্য করবেন যে আমরা এখানে একটি ডাবল NAT পরিস্থিতি। এটি যতটা অস্বস্তিকর হতে পারে ততটা সমস্যা নয় কারণ ভিপিএন ক্লায়েন্টের উদাহরণটি অক্ষম করা থাকলে ক্লায়েন্টরা সংযোগ করতে পারে ।
ভিপিএন ক্লায়েন্ট এবং সার্ভারের উদাহরণগুলি সক্ষম করে, এটি main
রাউটিং টেবিল, যেমনটি দেওয়া হয়েছে ip route list table main
:
0.0.0.0/1 via 10.63.10.5 dev tun0 #added by VPN client instance
default via 192.168.1.1 dev eth0 proto static
10.63.10.1 via 10.63.10.5 dev tun0 #added by VPN client instance
10.63.10.5 dev tun0 proto kernel scope link src 10.63.10.6 #added by VPN client instance
10.255.0.0/24 via 10.255.0.2 dev tun1
10.255.0.2 dev tun1 proto kernel scope link src 10.255.0.1
128.0.0.0/1 via 10.63.10.5 dev tun0 #added by VPN client instance
178.162.199.211 via 192.168.1.1 dev eth0 #added by VPN client instance
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.2
192.168.2.0/24 dev br-lan proto kernel scope link src 192.168.2.1
এবং এইগুলি আইপি বিধিগুলি হিসাবে দেওয়া হয়েছে ip rule list
:
0: from all lookup 128 #a non-existent table
1: from all lookup local
32766: from all lookup main
32767: from all lookup default #empty table
প্রচেষ্টা
সবার আগে আমি একটি no_vpn_provider
রাউটিং টেবিল ( echo "2 no_vpn_provider" >> /etc/iproute2/rt_tables
) তৈরি করেছি , main
ভিপিএন ক্লায়েন্টের উদাহরণ পরিবর্তন ছাড়াই টেবিলের একটি সঠিক অনুলিপি । ip route list table no_vpn_provider
শো
default via 192.168.1.1 dev eth0 proto static
10.255.0.0/24 via 10.255.0.2 dev tun1
10.255.0.2 dev tun1 proto kernel scope link src 10.255.0.1
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.2
192.168.2.0/24 dev br-lan proto kernel scope link src 192.168.2.1
1) আমি এই সহজ ip
নিয়ম চেষ্টা করেছিলাম
ip rule add from 192.168.1.2 table no_vpn_provider priority 2
ip rule add from 10.255.0.1 table no_vpn_provider priority 3
বাহ্যিক ইন্টারফেসের এবং আইপি ঠিকানাগুলি যথাক্রমে ভিপিএন সার্ভার ইন্টারফেসের 192.168.1.2
এবং কোথায় ।10.255.0.1
eth0
tun1
আমি চেষ্টা করেছি from all iif eth0
এবং from all iif tun1
পরিবর্তে from 192.168.1.2
এবং from 10.255.0.1
।
2) আমি ইন্টারফেসে এবং 0x1
নতুন সংযোগগুলি ( conntrack
মডিউলটি ইনস্টল করা আছে) এর সাথে চিহ্নিত করার চেষ্টা করেছিeth0
tun1
iptables -t mangle -A PREROUTING -m conntrack --ctstate NEW -i eth0 -j CONNMARK --set-mark 0x1
iptables -t mangle -A PREROUTING -m conntrack --ctstate NEW -i tun1 -j CONNMARK --set-mark 0x1
এবং চিহ্নিত সংযোগগুলি নতুন রাউটিং টেবিলটি ব্যবহার করতে এই বিধি যুক্ত করে
ip rule add fwmark 0x1 table no_vpn_provider priority 2
3) আমি ভিপিএন সার্ভার বন্দর থেকে বহির্গামী প্যাকেটগুলি চিহ্নিত করার চেষ্টা করেছি1194
iptables -t mangle -A OUTPUT -p udp --sport 1194 -j MARK --set-mark 0x1
iptables -t mangle -A OUTPUT -p tcp --sport 1194 -j MARK --set-mark 0x1 # just in case
এবং একই নিয়ম ব্যবহার করে
ip rule add fwmark 0x1 table no_vpn_provider priority 2
আমি 2) এবং 3) বিভিন্ন চিহ্ন দিয়ে এবং -I
সংযোজন ( -A
) পরিবর্তে ( ) সন্নিবেশ করেও চেষ্টা করেছি । আমার ফায়ারওয়াল সন্দেহ করা আমি পরীক্ষিত মোটেই চিহ্নিত করছিল না
iptables -t mangle -A FORWARD -s 192.168.2.0/24 -j MARK --set-mark 0x1
ip rule add fwmark 0x1 table no_vpn_provider priority 2
তবে, যেমনটি প্রত্যাশা করা হয়েছিল, আমার ল্যানের প্যাকেটগুলি ভিপিএন সরবরাহকারীর কাছে পাঠানো হয়নি।
4) এখন পর্যন্ত একমাত্র যে জিনিসটি কাজ করে তা হ'ল এই কুৎসিত বিধি
ip rule add from all to y.y.y.y/y table no_vpn_provider priority 2
যেখানে yyyy / y হল ক্লায়েন্টের সর্বজনীন আইপি ঠিকানা সংযোগ দেওয়ার চেষ্টা করছে: এটি অবশ্যই একটি ভয়াবহ সমাধান, কারণ ক্লায়েন্টরা সর্বদা একই নেটওয়ার্ক থেকে সংযোগ স্থাপন করে না।