以下为校区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. docker 容器的启动方式

    1.Docker 优势: .更高效利用系统资源:由于容器不需要进行硬件虚拟以及运行完整操作系统等额外开销,Docker 对系统资源的利用率更高.无论是应用执行速度.内存损耗或者文件存储速度,都要比传统 ...

  2. CentOS7 64位下MySQL5.7安装与配置(YUM)

    1.配置YUM源 在MySQL官网中下载YUM源rpm安装包:http://dev.mysql.com/downloads/repo/yum/ # 下载mysql源安装包 shell> wget ...

  3. 有这iconfont.woff文件 为什么还报404

    解决方法1.打开服务器IIS管理器,找到MIME类型. 2.添加MIME类型 添加三条: 文件扩展名 MIME类型 .svg image/svg+xml.woff application/x-font ...

  4. 迁移git

    转自:https://www.darrenfang.com/2016/03/transferring-a-repository/ 因为更换服务器,需要将原来的 git 项目迁移到新的服务器上,需要保留 ...

  5. WordPress安装官方文档教程

    01.可访问的网址 02.目录和软件 包括: 访问 web服务器 (通过 shell 或者 FTP)的权限 一个 文本编辑器 一个 FTP客户端 (如果你需要在一个远程服务器上安装WordPress) ...

  6. Python_001_开始学习的一些准备

    从Hello World!开始,希望你能坚持一下,然后每一天有一点收获. ♥   安装了pip和setuotools库: pip用于安装管理Python扩展包,setuptools用于分布Python ...

  7. Codeforces 1108F MST Unification(最小生成树性质)

    题目链接:MST Unification 题意:给定一张连通的无向带权图.存在给边权加一的操作,求最少操作数,使得最小生成树唯一. 题解:最小生成树在算法导论中有这个性质: 把一个连通无向图的生成树边 ...

  8. 【菜逼从零学dp】dp专题

    自己dp 太菜 基本没写过题所以就 从新来过从最简单的开始写吧 记录一下自己的历程 题目链接:牛牛与数组 dp[j,i] 表示 第j 位数  以i 结尾的 有多少个 先记录 以i结尾的 一共多少  然 ...

  9. Windows 10 x64 下编译 Hadoop 源码

    Windows 10 x64 下编译 Hadoop 源码 环境准备 Hadoop并没有提供官方的 Windows 10 下的安装包,所以需要自己手动来编译,官方文档中 BUILDING.txt 文件中 ...

  10. IDEA+Maven配置MyBatis的初体验(坑点总结)

    起因 在老师的推荐下,我跟着这篇文章https://www.jb51.net/article/70923.htm尝试MyBatis的初次调试运行.途中困难重重,由于教程中的开发环境是eclipse,项 ...