zoukankan      html  css  js  c++  java
  • openwrt双机热备

    转自:https://oldwiki.archive.openwrt.org/doc/recipes/high-availability

    先记号一下,有空再仔细研究。

    --------------------------------------------------------

    High availability

    High availability is a term that can be used to refer to systems that are designed to remain functional despite some hardware and/or software failures and/or planned maintenance (e.g. upgrades). Actual measured availability (e.g. percentage of time or requests that succeed) can vary.

    In this howto, we'll be describing a simple 2 router setup, in an active/backup configuration. The devices will share a virtual ip address that hosts on the lan can use as a gateway to reach the internet. In case the active router fails or is rebooted, a backup router will take over.

    We will be using keepalived to implement healthchecking and ip failover, and conntrack-tools to implement firewall/nat syncing.

    Most of openwrt configuration required (but not all) is doable from luci web ui as well.

    Preparation, assumptions, description of environment

    • You have 2 openwrt routers and a static WAN IP. (could also be a private IP+DMZ).

    • If you're not doing NAT or connection tracking based firewalling, skip the conntrackd/conntrack-tools sections.

    • DHCP dynamic WAN IP is possible with keepalived, but requires extra scripting and is not going to be described here.

    • VPNs and tunnel setups and failing those over is not covered.

    • Failing over PPPoE WAN is not implement, best bet: let the modem do PPPoE and setup your virtual wan ip to DMZ.

    Individual Router Configuration

    1. Configure 1st openwrt router

    • Internal LAN ip: 192.168.1.2/24 (change so 192.168.1.1 is available for initial configuration of 2nd router)

    • WAN IP, gateway: static 192.168.0.2/24 gw 192.168.0.1 metric 10 (using double nat / dmz on the isp provided router)

    • DHCP on defaults is fine, we'll configure it later.

    2. Configure 2nd openwrt router

    • Interface LAN ip: 192.168.1.3/24 (change so that when you connect the second router to the same network you can configure it)

    • WAN IP, gateway: static 192.168.0.3/24 gw 192.168.0.1 metric 10 (using double nat / dmz on the isp provided router)

    • DHCP on defaults is fine for now, if you have any static leases in dhcp, or fixed host entries, make sure they're the same as on 1st router.

    verification and troubleshooting

    • change a client to use gw 192.168.1.3 and dns 192.168.1.3, make sure second router is working as well

    • hosts that have IPs issued with one dnsmasq might not be resolvable using the second dnsmasq, assigning static leases helps.

    Both router configuration

    3. Configure keepalived

    keepalived is a linux daemon that uses VRRP (Virtual Router Redundancy Protocol) to healthcheck and elect a router on the network that will serve a particular IP. We'll be using a small subset of its features in our use case.

    opkg update opkg install keepalived

    The following configuration in /etc/keepalived/keepalived.conf assumes routers are symmetrical, ie. they're of the same priority, they start up in backup mode and they will not preemept the other router until they establish other router is gone. You will need to adjust the interfaces to match your device.

    ! Configuration File for keepalived
    
    ! failover E1 and I1 at the same time
    vrrp_sync_group G1 {
      group {
        E1
        I1
      }
    }
    
    ! internal
    vrrp_instance I1 {
      state backup
      interface br-lan
      virtual_router_id 51
      priority 101
      advert_int 1
      virtual_ipaddress {
        10.9.8.4/24
      }
      authentication {
        auth_type PASS
        auth_pass s3cret
      }
      nopreempt
    }
    
    ! external
    vrrp_instance E1 {
      state backup
      interface eth0.2
      virtual_router_id 51
      priority 101
      advert_int 1
      virtual_ipaddress {
        192.168.0.4/24
      }
      virtual_routes {
        src 192.168.0.4 to 0.0.0.0/0 via 192.168.0.1 dev eth0.2 metric 5
      }
      authentication {
        auth_type PASS
        auth_pass s3cret
      }
      nopreempt
    }

    4. Configure conntrackd

    This step is optional, keepalived will be failing over (successing over?) the ip address with or without conntrackd, however, as NAT relies on tracking connection state in a (network address) table that links external ip:port with internal ip:port (per given protocol, tcp or udp), connections might be broken on failover to backup openwrt instance. New connections (such as application level reconnects) will work just fine. This is because the backup instance will not know who to send outgoing packets to.

    Below is a simple config file for conntrackd. It would be advisable to navigate to /etc/conntrackd/ in order to rename the original config. Creating a brand new "conntrackd.conf" file allows you to browse back to the old one for reference.

    Sync {
        Mode FTFW {
            DisableExternalCache Off
            CommitTimeout 1800
            PurgeTimeout 5
        }
    
        UDP {
            IPv4_address "ip addr of host router"
            IPv4_Destination_Address "ip addr of partner router"
            Port 3780
            Interface eth*
            SndSocketBuffer 1249280
            RcvSocketBuffer 1249280
            Checksum on
        }
    }
    
    General {
        Nice -20
        HashSize 32768
        HashLimit 131072
        LogFile on
        Syslog on
        LockFile /var/lock/conntrack.lock
        UNIX {
            Path /var/run/conntrackd.ctl
            Backlog 20
        }
        NetlinkBufferSize 2097152
        NetlinkBufferSizeMaxGrowth 8388608
        Filter From Userspace {
            Protocol Accept {
                TCP
                UDP
                ICMP # This requires a Linux kernel >= 2.6.31
            }
            Address Ignore {
                IPv4_address 127.0.0.1 # loopback
            }
        }
    }
    
    

    Run simple commands to verify functionality

    Summary of connected devices:
    
    conntrackd -s
    
    Resync nodes:
    
    conntrackd -n
    

    3. Configure dhcp

    You'll want DHCP (dnsmasq) to serve 192.168.0.4 (vip address) to hosts on the lan, both as their gateway and DNS. Here's an excerpt from /etc/config/dhcp that instructs dnsmasq to do that.

    ...
    config dhcp 'lan'
            ...
            option force '1'
            list dhcp_option '3,192.168.1.4'
            list dhcp_option '6,192.168.1.4'
    ...

    option force '1' is needed for dnsmasq to not deactivate when it sees the other dhcp server. dhcp_option 3 is gateway, dhcp_option 6 is DNS.

    5. Sysupgrade backup add dirs

    Add the following directories to /etc/sysupgrade.conf. (can be done from luci as well).

    ...
    /etc/keepalived/
    /etc/conntrackd/

    Testing and verification

    TODO(risk): restarting keepalived with logread -f open, pulling cables with ssh / telnet / http sessions open, forcing dhcp renewal with tcpdump running, ensure

  • 相关阅读:
    10.2 处理大集合
    观察者模式——出版者与订阅者
    phonegap(cordova) 自己定义插件代码篇(五)----android ,iOS 集成微信登陆
    另一鲜为人知的单例写法-ThreadLocal
    Spring MVC中Controller如何将数据返回给页面
    IntelliJ IDEA安装主题详细步骤
    oracle导出dmp文件的2种方法
    Oracle导出表(即DMP文件)的两种方法
    Spring MVC 实现文件的上传和下载
    压力测试 JMeter3.3
  • 原文地址:https://www.cnblogs.com/d9394/p/11116283.html
Copyright © 2011-2022 走看看