این آموزش به شما کمک میکنه تا بین دو سرور (یکی در ایران و یکی در خارج) یک تانل امن بسازید و با استفاده از HAProxy ترافیک رو منتقل کنید.
- دور زدن فیلترینگ و سانسور
- انتقال ترافیک از سرور ایران به خارج
- بهبود سرعت و پایداری اتصال
- دو سرور لینوکس (یکی ایران، یکی خارج)
- دسترسی root به هر دو سرور
- IP عمومی هر دو سرور
برای این آموزش از IP های زیر استفاده میکنیم (شما باید IP های سرورهای خودتون رو جایگزین کنید):
IP سرور ایران: YOUR_IRAN_IP
IP سرور خارج: YOUR_KHAREJ_IP
IPv6 های لوکال که استفاده میکنیم:
IPv6 ایران: fd12:3456:789a::1/64
IPv6 خارج: fd12:3456:789a::2/64
IPv4 های لوکال GRE:
IPv4 GRE ایران: 10.10.10.1/30
IPv4 GRE خارج: 10.10.10.2/30
ابتدا SSH به سرور ایران بزنید و این دستورات رو اجرا کنید:
# پاک کردن تانلهای قبلی
ip link set GRE6Tun_To_KH down 2>/dev/null
ip link set 6to4_To_KH down 2>/dev/null
ip -6 tunnel del GRE6Tun_To_KH 2>/dev/null
ip tunnel del 6to4_To_KH 2>/dev/null
# پاک کردن قوانین فایروال قبلی
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
ip6tables -F
ip6tables -Xmodprobe sit
modprobe ip6_gre
modprobe ip6_tunnelمهم: در خط اول، YOUR_KHAREJ_IP را با IP سرور خارج و YOUR_IRAN_IP را با IP سرور ایران جایگزین کنید.
ip tunnel add 6to4_To_KH mode sit remote YOUR_KHAREJ_IP local YOUR_IRAN_IP
ip -6 addr add fd12:3456:789a::1/64 dev 6to4_To_KH
ip link set 6to4_To_KH mtu 1280
ip link set 6to4_To_KH upip -6 tunnel add GRE6Tun_To_KH mode ip6gre remote fd12:3456:789a::2 local fd12:3456:789a::1
ip addr add 10.10.10.1/30 dev GRE6Tun_To_KH
ip link set GRE6Tun_To_KH mtu 1240
ip link set GRE6Tun_To_KH upiptables -A INPUT -p gre -j ACCEPT
iptables -A OUTPUT -p gre -j ACCEPT
ip6tables -A INPUT -p ipv6-icmp -j ACCEPT
ip6tables -A OUTPUT -p ipv6-icmp -j ACCEPT# مشاهده تانلها
ip tunnel show
ip -6 tunnel show
# مشاهده IP ها
ip addr show dev GRE6Tun_To_KHSSH به سرور خارج بزنید:
# پاک کردن تانلهای قبلی
ip link set GRE6Tun_To_IR down 2>/dev/null
ip link set 6to4_To_IR down 2>/dev/null
ip -6 tunnel del GRE6Tun_To_IR 2>/dev/null
ip tunnel del 6to4_To_IR 2>/dev/null
# پاک کردن فایروال
iptables -F
iptables -X
ip6tables -F
ip6tables -Xmodprobe sit
modprobe ip6_gre
modprobe ip6_tunnelمهم: YOUR_IRAN_IP و YOUR_KHAREJ_IP را جایگزین کنید.
ip tunnel add 6to4_To_IR mode sit remote YOUR_IRAN_IP local YOUR_KHAREJ_IP
ip -6 addr add fd12:3456:789a::2/64 dev 6to4_To_IR
ip link set 6to4_To_IR mtu 1280
ip link set 6to4_To_IR upip -6 tunnel add GRE6Tun_To_IR mode ip6gre remote fd12:3456:789a::1 local fd12:3456:789a::2
ip addr add 10.10.10.2/30 dev GRE6Tun_To_IR
ip link set GRE6Tun_To_IR mtu 1240
ip link set GRE6Tun_To_IR upiptables -A INPUT -p gre -j ACCEPT
iptables -A OUTPUT -p gre -j ACCEPT
ip6tables -A INPUT -p ipv6-icmp -j ACCEPT
ip6tables -A OUTPUT -p ipv6-icmp -j ACCEPT# تست ping با IPv6
ping6 fd12:3456:789a::2 -c 5
# تست ping با IPv4 GRE
ping 10.10.10.2 -c 5# تست ping با IPv6
ping6 fd12:3456:789a::1 -c 5
# تست ping با IPv4 GRE
ping 10.10.10.1 -c 5نتیجه موفق: اگر پینگها پاسخ دادند، تانل شما با موفقیت برقرار شده!
apt update && apt install haproxy -yفایل کانفیگ را باز کنید:
nano /etc/haproxy/haproxy.cfgهمه محتوای فایل را پاک کنید و این را جایگزین کنید:
global
log /dev/log local0
chroot /var/lib/haproxy
user haproxy
group haproxy
daemon
defaults
log global
mode tcp
option tcplog
timeout connect 5000
timeout client 50000
timeout server 50000
# پورت 443 (HTTPS)
frontend https_front
bind *:443
default_backend https_back
backend https_back
server kharej 10.10.10.2:443 check
# پورت 80 (HTTP)
frontend http_front
bind *:80
default_backend http_back
backend http_back
server kharej 10.10.10.2:80 check
# پورت 8080 (مثال)
frontend port_8080
bind *:8080
default_backend back_8080
backend back_8080
server kharej 10.10.10.2:8080 check
برای ذخیره: Ctrl + X سپس Y سپس Enter
systemctl restart haproxy
systemctl enable haproxy
systemctl status haproxyاگر وضعیت active (running) بود، HAProxy با موفقیت اجرا شده!
این قسمت باعث میشود تانلها بعد از ریبوت سرور به صورت خودکار بالا بیایند.
nano /etc/rc.local
chmod +x /etc/rc.localاین محتوا را در فایل قرار دهید (IP ها را جایگزین کنید):
#!/bin/bash
modprobe sit
modprobe ip6_gre
modprobe ip6_tunnel
ip tunnel add 6to4_To_KH mode sit remote YOUR_KHAREJ_IP local YOUR_IRAN_IP
ip -6 addr add fd12:3456:789a::1/64 dev 6to4_To_KH
ip link set 6to4_To_KH mtu 1280
ip link set 6to4_To_KH up
ip -6 tunnel add GRE6Tun_To_KH mode ip6gre remote fd12:3456:789a::2 local fd12:3456:789a::1
ip addr add 10.10.10.1/30 dev GRE6Tun_To_KH
ip link set GRE6Tun_To_KH mtu 1240
ip link set GRE6Tun_To_KH up
iptables -A INPUT -p gre -j ACCEPT
iptables -A OUTPUT -p gre -j ACCEPT
ip6tables -A INPUT -p ipv6-icmp -j ACCEPT
ip6tables -A OUTPUT -p ipv6-icmp -j ACCEPT
exit 0nano /etc/rc.local
chmod +x /etc/rc.localاین محتوا را در فایل قرار دهید:
#!/bin/bash
modprobe sit
modprobe ip6_gre
modprobe ip6_tunnel
ip tunnel add 6to4_To_IR mode sit remote YOUR_IRAN_IP local YOUR_KHAREJ_IP
ip -6 addr add fd12:3456:789a::2/64 dev 6to4_To_IR
ip link set 6to4_To_IR mtu 1280
ip link set 6to4_To_IR up
ip -6 tunnel add GRE6Tun_To_IR mode ip6gre remote fd12:3456:789a::1 local fd12:3456:789a::2
ip addr add 10.10.10.2/30 dev GRE6Tun_To_IR
ip link set GRE6Tun_To_IR mtu 1240
ip link set GRE6Tun_To_IR up
iptables -A INPUT -p gre -j ACCEPT
iptables -A OUTPUT -p gre -j ACCEPT
ip6tables -A INPUT -p ipv6-icmp -j ACCEPT
ip6tables -A OUTPUT -p ipv6-icmp -j ACCEPT
exit 0راه حل:
- MTU را کمتر کنید (مثلاً 1200 و 1160)
- فایروال سرورها را بررسی کنید
- اطمینان حاصل کنید IP ها درست وارد شدهاند
# کم کردن MTU
ip link set 6to4_To_KH mtu 1200
ip link set GRE6Tun_To_KH mtu 1160راه حل:
- MTU را تنظیم کنید
- با این دستور MTU بهینه را پیدا کنید:
ping 10.10.10.2 -c 5 -M do -s 1200
ping 10.10.10.2 -c 5 -M do -s 1100
ping 10.10.10.2 -c 5 -M do -s 1000اولین مقداری که پینگ خورد + 28 = MTU مناسب
راه حل:
- اطمینان حاصل کنید
/etc/rc.localساخته شده - دستور
chmod +x /etc/rc.localرا اجرا کنید - یکبار دستی ریبوت کنید و تست کنید
apt update && apt install iperf3 -yiperf3 -s# تست دانلود
iperf3 -c 10.10.10.2 -t 20
# تست آپلود
iperf3 -c 10.10.10.2 -t 20 -R
# تست دو طرفه
iperf3 -c 10.10.10.2 -t 20 -dاگر میخواهید همه چیز را پاک کنید:
ip link set GRE6Tun_To_KH down
ip link set 6to4_To_KH down
ip -6 tunnel del GRE6Tun_To_KH
ip tunnel del 6to4_To_KH
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
systemctl stop haproxy
rm -f /etc/rc.localip link set GRE6Tun_To_IR down
ip link set 6to4_To_IR down
ip -6 tunnel del GRE6Tun_To_IR
ip tunnel del 6to4_To_IR
iptables -F
iptables -X
rm -f /etc/rc.local- همیشه IP های خودتون رو جایگزین کنید -
YOUR_IRAN_IPوYOUR_KHAREJ_IP - MTU خیلی مهمه - اگر مشکل سرعت داشتید، اول MTU رو تنظیم کنید
- قبل از هر کاری بکاپ بگیرید - از تنظیمات فعلی سرورتون
- پورتهای HAProxy - طبق نیاز خودتون اضافه یا کم کنید
- فایروال - اگر فایروال فعال دارید، پورتهای لازم رو باز کنید
اگر مشکلی پیش اومد:
- لاگها رو چک کنید:
journalctl -xe - HAProxy logs:
tail -f /var/log/haproxy.log - دستور
ip tunnel showوip addr showرو اجرا کنید و خروجی رو بررسی کنید
موفق باشید! 🚀