Cân bằng tải với nhiều cổng


5

Tôi phải đến các ISP khác nhau, mỗi ISP trên mỗi mạng riêng. Chính kết nối qua ethernet và phụ thông qua wifi. Hai mạng không có mối quan hệ nào cả. Tôi chỉ kết nối với họ cùng một lúc. Lý do tôi muốn tải cân bằng giữa chúng là để đạt được tốc độ Internet cao hơn. Lưu ý: Tôi không có phần cứng mạng tiên tiến. Chỉ có máy tính của tôi và hai bộ định tuyến mà tôi không có quyền truy cập ... mạng chính:

if: eth0
gw: 192.168.178.1
my ip: 192.168.178.95
speed: 400 kbit/s

mạng thứ cấp:

if: wlan0
gw: 192.168.1.1
my ip: 192.168.1.95
speed: 300 kbit/s

Một sơ đồ để giải thích tình hình:

nhập mô tả hình ảnh ở đây

Tôi đang dùng Arch Linux x64. Tôi sử dụng netcfg để cấu hình các giao diện Configs:

# /etc/network.d/main
CONNECTION='ethernet'
DESCRIPTION='A basic static ethernet connection using iproute'
INTERFACE='eth0'
IP='static'
ADDR='192.168.178.95'

# /etc/network.d/second
CONNECTION='wireless'
DESCRIPTION='A simple WEP encrypted wireless connection'
INTERFACE='wlan0'
SECURITY='wep'
ESSID='wifi_essid'
KEY='the_password'
IP="static"
ADDR='192.168.1.95'

Và tôi sử dụng iptables để tải cân bằng, quy tắc:

#!/bin/bash
/usr/sbin/ip route flush table ISP1 2>/dev/null
/usr/sbin/ip rule del fwmark 101 table ISP1 2>/dev/null
/usr/sbin/ip route add table ISP1 192.168.178.0/24 dev eth0 proto kernel  scope link  src 192.168.178.95  metric 202
/usr/sbin/ip route add table ISP1 default via 192.168.178.1 dev eth0
/usr/sbin/ip rule add fwmark 101 table ISP1
/usr/sbin/ip route flush table ISP2 2>/dev/null
/usr/sbin/ip rule del fwmark 102 table ISP2 2>/dev/null
/usr/sbin/ip route add table ISP2 192.168.1.0/24 dev wlan0 proto kernel  scope link  src 192.168.1.95  metric 202
/usr/sbin/ip route add table ISP2 default via 192.168.1.1 dev wlan0
/usr/sbin/ip rule add fwmark 102 table ISP2
/usr/sbin/iptables -t mangle -F
/usr/sbin/iptables -t mangle -X
/usr/sbin/iptables -t mangle -N MARK-gw1
/usr/sbin/iptables -t mangle -A MARK-gw1 -m comment --comment 'send via 192.168.178.1' -j MARK --set-mark 101
/usr/sbin/iptables -t mangle -A MARK-gw1 -j CONNMARK --save-mark
/usr/sbin/iptables -t mangle -A MARK-gw1 -j RETURN
/usr/sbin/iptables -t mangle -N MARK-gw2
/usr/sbin/iptables -t mangle -A MARK-gw2 -m comment --comment 'send via 192.168.1.1' -j MARK --set-mark 102
/usr/sbin/iptables -t mangle -A MARK-gw2 -j CONNMARK --save-mark
/usr/sbin/iptables -t mangle -A MARK-gw2 -j RETURN
/usr/sbin/iptables -t mangle -A PREROUTING -j CONNMARK --restore-mark
/usr/sbin/iptables -t mangle -A PREROUTING -m comment --comment "this stream is already marked; escape early" -m mark ! --mark 0 -j ACCEPT
/usr/sbin/iptables -t mangle -A PREROUTING -m comment --comment 'prevent asynchronous routing' -i eth0 -m conntrack --ctstate NEW -j MARK-gw1
/usr/sbin/iptables -t mangle -A PREROUTING -m comment --comment 'prevent asynchronous routing' -i wlan0 -m conntrack --ctstate NEW -j MARK-gw2
/usr/sbin/iptables -t mangle -N DEF_POL
/usr/sbin/iptables -t mangle -A DEF_POL -m comment --comment 'default balancing' -p tcp -m conntrack --ctstate ESTABLISHED,RELATED -j CONNMARK --restore-mark
/usr/sbin/iptables -t mangle -A DEF_POL -m comment --comment 'default balancing' -p udp -m conntrack --ctstate ESTABLISHED,RELATED -j CONNMARK --restore-mark
/usr/sbin/iptables -t mangle -A DEF_POL -m comment --comment 'balance gw1 tcp' -p tcp -m conntrack --ctstate NEW -m statistic --mode nth --every 2 --packet 0 -j MARK-gw1
/usr/sbin/iptables -t mangle -A DEF_POL -m comment --comment 'balance gw1 tcp' -p tcp -m conntrack --ctstate NEW -m statistic --mode nth --every 2 --packet 0 -j ACCEPT
/usr/sbin/iptables -t mangle -A DEF_POL -m comment --comment 'balance gw2 tcp' -p tcp -m conntrack --ctstate NEW -m statistic --mode nth --every 2 --packet 1 -j MARK-gw2
/usr/sbin/iptables -t mangle -A DEF_POL -m comment --comment 'balance gw2 tcp' -p tcp -m conntrack --ctstate NEW -m statistic --mode nth --every 2 --packet 1 -j ACCEPT
/usr/sbin/iptables -t mangle -A DEF_POL -m comment --comment 'balance gw1 udp' -p udp -m conntrack --ctstate NEW -m statistic --mode nth --every 2 --packet 0 -j MARK-gw1
/usr/sbin/iptables -t mangle -A DEF_POL -m comment --comment 'balance gw1 udp' -p udp -m conntrack --ctstate NEW -m statistic --mode nth --every 2 --packet 0 -j ACCEPT
/usr/sbin/iptables -t mangle -A DEF_POL -m comment --comment 'balance gw2 udp' -p udp -m conntrack --ctstate NEW -m statistic --mode nth --every 2 --packet 1 -j MARK-gw2
/usr/sbin/iptables -t mangle -A DEF_POL -m comment --comment 'balance gw2 udp' -p udp -m conntrack --ctstate NEW -m statistic --mode nth --every 2 --packet 1 -j ACCEPT
/usr/sbin/iptables -t mangle -A PREROUTING -j DEF_POL
/usr/sbin/iptables -t nat -A POSTROUTING -m comment --comment 'snat outbound eth0' -o eth0 -s 192.168.0.0/16 -m mark --mark 101 -j SNAT --to-source 192.168.178.95
/usr/sbin/iptables -t nat -A POSTROUTING -m comment --comment 'snat outbound wlan0' -o wlan0 -s 192.168.0.0/16 -m mark --mark 102 -j SNAT --to-source 192.168.1.95
/usr/sbin/ip route flush cache

(kịch bản này được tạo bởi fukawi2, tôi không biết cách sử dụng iptables) nhưng tôi không có kết nối Internet ...

đầu ra của iptables -t mangle -nvL

Chain PREROUTING (policy ACCEPT 1254K packets, 1519M bytes)
 pkts bytes target     prot opt in     out     source               destination         
1278K 1535M CONNMARK   all  --  *      *       0.0.0.0/0            0.0.0.0/0            CONNMARK restore
21532   15M ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            /* this stream is already marked; escape early */ mark match ! 0x0
  582 72579 MARK-gw1   all  --  eth0   *       0.0.0.0/0            0.0.0.0/0            /* prevent asynchronous routing */ ctstate NEW
 2376  696K MARK-gw2   all  --  wlan0  *       0.0.0.0/0            0.0.0.0/0            /* prevent asynchronous routing */ ctstate NEW
1257K 1520M DEF_POL    all  --  *      *       0.0.0.0/0            0.0.0.0/0           

Chain INPUT (policy ACCEPT 1276K packets, 1535M bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 870K packets, 97M bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain POSTROUTING (policy ACCEPT 870K packets, 97M bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain DEF_POL (1 references)
 pkts bytes target     prot opt in     out     source               destination         
1236K 1517M CONNMARK   tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            /* default balancing */ ctstate RELATED,ESTABLISHED CONNMARK restore
15163 2041K CONNMARK   udp  --  *      *       0.0.0.0/0            0.0.0.0/0            /* default balancing */ ctstate RELATED,ESTABLISHED CONNMARK restore
  555 33176 MARK-gw1   tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            /* balance gw1 tcp */ ctstate NEW statistic mode nth every 2
  555 33176 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            /* balance gw1 tcp */ ctstate NEW statistic mode nth every 2
  277 16516 MARK-gw2   tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            /* balance gw2 tcp */ ctstate NEW statistic mode nth every 2 packet 1
  277 16516 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            /* balance gw2 tcp */ ctstate NEW statistic mode nth every 2 packet 1
 1442  384K MARK-gw1   udp  --  *      *       0.0.0.0/0            0.0.0.0/0            /* balance gw1 udp */ ctstate NEW statistic mode nth every 2
 1442  384K ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0            /* balance gw1 udp */ ctstate NEW statistic mode nth every 2
  720  189K MARK-gw2   udp  --  *      *       0.0.0.0/0            0.0.0.0/0            /* balance gw2 udp */ ctstate NEW statistic mode nth every 2 packet 1
  720  189K ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0            /* balance gw2 udp */ ctstate NEW statistic mode nth every 2 packet 1

Chain MARK-gw1 (3 references)
 pkts bytes target     prot opt in     out     source               destination         
 2579  490K MARK       all  --  *      *       0.0.0.0/0            0.0.0.0/0            /* send via 192.168.178.1 */ MARK set 0x65
 2579  490K CONNMARK   all  --  *      *       0.0.0.0/0            0.0.0.0/0            CONNMARK save
 2579  490K RETURN     all  --  *      *       0.0.0.0/0            0.0.0.0/0           

Chain MARK-gw2 (3 references)
 pkts bytes target     prot opt in     out     source               destination         
 3373  901K MARK       all  --  *      *       0.0.0.0/0            0.0.0.0/0            /* send via 192.168.1.1 */ MARK set 0x66
 3373  901K CONNMARK   all  --  *      *       0.0.0.0/0            0.0.0.0/0            CONNMARK save
 3373  901K RETURN     all  --  *      *       0.0.0.0/0            0.0.0.0/0

câu hỏi chính xác của bạn là gì? Một liên kết hữu ích để hiểu những gì bạn đang cố gắng làm là linux-ip.net/html/linux-ip.html#adv-multi-iNET
teissler

Tôi đang cố gắng đạt được tốc độ internet lớn hơn với nhiều kết nối internet
dzervas

Câu trả lời:


2

Trừ khi bạn bằng cách nào đó có thể phân chia lưu lượng dựa trên các tham số cục bộ của chúng (như LAN IP), bằng cách sử dụng giải pháp này, bạn sẽ gặp rất nhiều lỗi ngẫu nhiên vì rất nhiều trang web không cho phép bạn sử dụng cùng một phiên từ khác nhau hoàn toàn Địa chỉ IP, chưa kể các giao thức khác như FTP, DNS, v.v.

Nếu bạn thực sự muốn làm điều này, bạn sẽ cần thuê một máy chủ (ảo) có ít nhất 2 địa chỉ IP và xây dựng VPN trên mỗi kết nối của bạn, sau đó thiết lập cân bằng tải OSPF để sử dụng cả hai kết nối. Máy chủ của bạn sẽ cần có ít nhất gấp đôi tốc độ của hai kết nối của bạn với nhau.

Tóm lại: không có chuyển đổi dự phòng hỗ trợ mạng hoạt động đủ tốt, tuy nhiên việc cân bằng tải sẽ là một nỗi đau liên tục.

Cập nhật: Những gì bạn cần làm:

  1. Thiết lập máy chủ và đảm bảo rằng máy cục bộ của bạn nhìn thấy hai IP máy chủ thông qua các kết nối khác nhau.
  2. Bắt đầu hai máy chủ OpenVPN trên máy chủ, lắng nghe từng địa chỉ.
  3. Bắt đầu hai ứng dụng khách OpenVPN trên máy khách.
  4. Cài đặt Quagga trên cả máy chủ và máy khách.
  5. Đảm bảo rằng máy chủ và máy khách nhìn thấy nhau thông qua OpenVPN mà không quảng cáo bất kỳ tuyến đường nào.
  6. Thiết lập quảng cáo định tuyến trên máy chủ để tuyến đường mặc định (0.0.0.0/0) được quảng cáo qua OSPF một liên kết đến máy khách thông qua phân phối lại các tuyến tĩnh. (Điều này thật khó.)
  7. Thêm liên kết thứ hai dưới dạng liên kết dự phòng qua OSPF.
  8. Thay đổi cấu hình để hai liên kết được sử dụng trong chế độ cân bằng tải.

OSPF là một thế giới hoàn toàn mới, đó là một phần không thể thiếu trong cách thức hoạt động của internet ngoài kia. Nếu bạn thực sự muốn làm điều này, tôi khuyên bạn nên cho mình thời gian và đọc một số cuốn sách vì nó nằm ngoài phạm vi của mô tả này. Tôi đã thực hiện điều này một lần và tôi có thể quay lại để viết một hướng dẫn về điều này, nhưng sẽ mất nhiều thời gian vì vậy tôi sẽ không hứa gì cả.


Tôi có một VPS thực sự có tốc độ cần thiết. Bạn có thể giúp tôi về điều này? Ý tưởng của bạn rất tốt!
dzervas

Cập nhật câu trả lời, tuy nhiên, một hướng dẫn đầy đủ nằm ngoài phạm vi ở đây.
Janos Pasztor

Vâng tôi đồng ý. Bước thứ 6 thực sự nghe có vẻ khó khăn ...: P
dzervas

Thật ra đó là phần dễ dàng. Thiết lập OSPF đúng cách là phần khó.
Janos Pasztor

Có cách nào để tránh IP thứ hai không? Tôi có một tên miền và tôi đã đọc trong wiki vòm rằng tôi có thể sử dụng một tên miền đủ điều kiện ( wiki.archlinux.org/index.php/iêu )
dzervas
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.