以下为校区ACM实验室多拨脚本,使用了macvlan模块,具体策略路由和连接标记等思路就不解释了。

 #! /bin/bash

 getip() {
ifconfig $ |grep -o -e 'inet addr:[^ ]*' | grep -o -e '[^:]*$'
} ip link add link br0 address ::3e:aa:bb:xx dev veth0 type macvlan
ip link add link br0 address ::3e:aa:bb:yy dev veth1 type macvlan
ip link add link br0 address ::3e:aa:bb:zz dev veth2 type macvlan
dhclient veth0 veth1 veth2 iptables -t mangle -N PREROUTING_INPUT
iptables -t mangle -N POSTROUTING_GUESS IPROUTE_ARGS="" for((i=;i<;++i)); do
for ((j=;j<;++j)); do
IP="$(getip veth$i)"
[[ -n $IP ]] && break
sleep
done
[[ -z $IP ]] && continue SUBNET="${IP%.[0-9]*}"
GATEWAY="${SUBNET}.254" iptables -t mangle -A PREROUTING_INPUT -i veth$i -j MARK --set-mark $[$i+0x100]
iptables -t mangle -A PREROUTING_INPUT -i veth$i -j ACCEPT iptables -t mangle -A POSTROUTING_GUESS -o veth$i -j MARK --set-mark $[$i+0x100] ip route append "${SUBNET}.0/24" dev veth$i src $IP table default &&
ip route del "${SUBNET}.0/24" dev veth$i table main ip route add default via $GATEWAY dev veth$i table veth$i ip rule add from $IP table veth$i
ip rule add to $IP table veth$i
ip rule add fwmark $[$i+0x100] table veth$i
IPROUTE_ARGS=$IPROUTE_ARGS" nexthop via "$GATEWAY" dev veth"$i" weight 1"
done # Connections can not change link, get link from saved mark, even for
# incoming traffic
iptables -t mangle -A PREROUTING -m conntrack --ctstate ESTABLISHED,RELATED -j CONNMARK --restore-mark # Select link if not selected yet. NEW state can match conns even after reboot.
# Even for incoming connections destined to local address.
iptables -t mangle -A PREROUTING -m state --state NEW -j PREROUTING_INPUT # Connection has no mark from PREROUTING, see which link is selected by routing
iptables -t mangle -A POSTROUTING -m state --state NEW -m mark --mark -j POSTROUTING_GUESS # Save mark in conntrack when connection is created
iptables -t mangle -A POSTROUTING -m conntrack --ctstate NEW -j CONNMARK --save-mark ip route replace default scope global table default equalize $IPROUTE_ARGS # Remove default route from table main
ip route del default table main # Add main table at top.
ip rule add from all lookup main

multiwan 脚本的更多相关文章

  1. multiwan 系统配置补充

    /etc/sysctl.conf: # Controls source route verification net.ipv4.conf.default.rp_filter = # Allows to ...

  2. Apache执行Python脚本

    由于经常需要到服务器上执行些命令,有些命令懒得敲,就准备写点脚本直接浏览器调用就好了,比如这样: 因为线上有现成的Apache,就直接放它里面了,当然访问安全要设置,我似乎别的随笔里写了安全问题,这里 ...

  3. SQL Server镜像自动生成脚本

    SQL Server镜像自动生成脚本 镜像的搭建非常繁琐,花了一点时间写了这个脚本,方便大家搭建镜像 执行完这个镜像脚本之后,最好在每台机器都绑定一下hosts文件,不然的话,镜像可能会不work 1 ...

  4. 分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间)

    分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间) 很多时候我们都需要计算数据库中各个表的数据量和每行记录所占用空间 这里共享一个脚本 CREATE TABLE #tab ...

  5. 探真无阻塞加载javascript脚本技术,我们会发现很多意想不到的秘密

    下面的图片是我使用firefox和chrome浏览百度首页时候记录的http请求 下面是firefox: 下面是chrome: 在浏览百度首页前我都将浏览器的缓存全部清理掉,让这个场景最接近第一次访问 ...

  6. 第一个shell脚本

    打开文本编辑器,新建一个文件,扩展名为sh(sh代表shell),扩展名并不影响脚本执行,见名知意就好. #!/bin/bash echo "Hello World !" &quo ...

  7. Java 8 的 Nashorn 脚本引擎教程

    本文为了解所有关于 Nashorn JavaScript 引擎易于理解的代码例子. Nashorn JavaScript 引擎是Java SE 8的一部分,它与其它像Google V8 (它是Goog ...

  8. 【开源】.Net 动态脚本引擎NScript

    开源地址: https://git.oschina.net/chejiangyi/NScript 开源QQ群: .net 开源基础服务  238543768 .Net 动态脚本引擎 NScript   ...

  9. InstallShield 脚本语言学习笔记

    InstallShield脚本语言是类似C语言,利用InstallShield的向导或模板都可以生成基本的脚本程序框架,可以在此基础上按自己的意愿进行修改和添加.     一.基本语法规则      ...

随机推荐

  1. XML的几种转换

    package com.qbskj.project.util; import java.io.ByteArrayOutputStream; import java.util.ArrayList; im ...

  2. JavaScript加载次序问题

    3个文件,一个index.html如下 <!DOCTYPE html> <html> <head> <meta charset="UTF-8&quo ...

  3. 个人jQuery的使用总结

    一.使用方法 参考内容有: http://www.w3school.com.cn/jquery/jquery_ref_events.asp http://www.cnblogs.com/zhangzi ...

  4. MySQL数据库8.0.15 安装教程

    第一步:安装MySQL服务 这里下载完成的是一个压缩文件,直接将里面的‘mysql-8.0.15-winx64'文件夹解压到你想要安装的路径即可,我是直接安装在C盘的. 解压完后的文件路径如下图: 在 ...

  5. ThunderBird配置邮箱后无法发送邮件

    今天遇到的问题是在ThunderBird配置邮箱后无法发送邮件.用户名和密码都验证过去了.但一直无法发送邮件. 1.首先imap 和smtp 服务器都是通的. telnet imap.base-fx. ...

  6. 用ES6创建一个简单工厂模式

    1 什么是工厂模式? 工厂模式是用来创建对象的一种最常用的设计模式.我们不暴露创建对象的具体逻辑,而是将将逻辑封装在一个函数中,那么这个函数就可以被视为一个工厂.工厂模式根据抽象程度的不同可以分为:简 ...

  7. python学习日记(初识递归与算法)

    递归函数 定义 递归的定义——在一个函数里再调用这个函数本身 递归的最大深度——997,即栈溢出. 使用递归函数需要注意防止栈溢出.在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进 ...

  8. cucumber学习笔记

    来源于cucumber官网 学习完了之后全部整理一遍

  9. app开发中的经常遇到的问题

    1.banner不显示: 原因:配置文件中的 域名写错了. img_path = https://www.beicaiduo.com/znbsite/static/tinymce/upload/ 解决 ...

  10. thrift使用

    一.什么是thrift Thrift是一种接口描述语言和二进制通讯协议,它被用来定义和创建跨语言的服务.它被当作一个远程过程调用(RPC)框架来使用,是由FaceBook为“大规模跨语言服务开发”而开 ...