Vitual Router in The Cloud
VyOS and ESXi,VyOS Configuration
The next step is to configure both VyOS routers. Before we do, we should ensure that we have a good high-level understanding of what should be happening.
The ultimate goal of this three-router setup is to have our own VyOS router as the gateway to the Internet, while also allowing the Verizon router to continue providing network access for the value-added services
like:
- Video-on-Demand to set-top boxes
- On-screen caller ID
- Remote DVR access
- Etc.
The Verizon router does this by setting up its own NAT’d network on the 192.168.1.0/24 range, which the STBs in
the house sit on and use to communicate with Verizon’s servers. The VZ router expects and requires the IP it is assigned on its WAN port to be publicly routable on the FiOS ISP network. If it is not, things may or may not work, or they might become unpredictable
in their functionality.
The entire point of the secondary router is to provide 1:1 NAT between the home network and the VZ router, so that the VZ router gets assigned the same IP as the primary router that is actually talking to the FiOS
ISP network.
With
three different Layer 2 domains and some creative port forwarding, the Verizon router won’t even know the difference.
This network configuration, combined with some port forwarding rules on the primary and secondary router (discussed later), allows traffic between the Verizon router and the Verizon servers to flow normally without
the VZ router being aware that it is not actually directly connected to the FiOS ISP network.
Let’s start by configuring the primary router. This router will actually receive the public-facing IP from the FiOS ISP network, and thus will ultimately be responsible for all Internet traffic. Log into your primary
router and run the show interfaces command.
vyos@primary-router:~$ show interfaces
Codes: S - State, L - Link, u - Up, D - Down, A - Admin Down
Interface IP Address S/L Description
--------- ---------- --- -----------
eth0 108.0.0.123/24 u/u FiOS Public Internet
eth1 10.0.0.1/24 u/u Home Network
lo 127.0.0.1/8 u/u
::1/128
We see two Ethernet interfaces, eth0 and eth1. These represent the two vNICs provisioned
to this VM, and which correspond to the FiOS Public Network and Home Network port groups, respectively.
Let’s configure the eth0 interface first.
vyos@primary-router:~$ configure
vyos@primary-router:~# set interfaces ethernet eth0 address dhcp
vyos@primary-router:~# set interfaces ethernet eth0 description FiOS_ISP_Net
vyos@primary-router:~# set interfaces ethernet eth0 duplex auto
vyos@primary-router:~# set interfaces ethernet eth0 speed auto
This will set this interface up to use a dynamically assigned address (from Verizon), set a description to make it easy to remember what it connects to, and auto negotiate speed and duplex settings.
There is one more step required. We must configure this interface to impersonate our Verizon hardware router’s WAN interface
by setting it to use the same MAC address (Verizon filters MACs that are not on its whitelist). You can find the WAN MAC you need to enter printed on the
bottom of your Verizon router. Replace 0a:1b:2c:3d:4e:5f below as appropriate:
vyos@primary-router:~# set interfaces ethernet eth0 mac 0a:1b:2c:3d:4e:5f
Let’s take a look at the changes we are making.
vyos@primary-router:~# compare
When you are satisfied, commit the changes to the running configuration and save the running config to disk. If you commit but do not save, the changes will not persist after a reboot of the router.
vyos@primary-router:~# commit
vyos@primary-router:~# save
Let’s take another look at the interface configuration now. We’re still in configuration mode (note the # symbol at the end of the command prompt),
so we need to prepend run to the command we used before.
vyos@primary-router:~# run show interfaces
Hopefully, your eth0 interface has a public address assigned from the Verizon DHCP server. If not, check your connections and configurations.
Assuming all is well, you should now be able to ping addresses to confirm that you have connectivity out to the Internet.
vyos@primary-router:~# run ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_req=1 ttl=251 time=21.1 ms
64 bytes from 8.8.8.8: icmp_req=2 ttl=251 time=22.0 ms
64 bytes from 8.8.8.8: icmp_req=3 ttl=251 time=20.9 ms
64 bytes from 8.8.8.8: icmp_req=4 ttl=251 time=22.3 ms
^C
--- 8.8.8.8 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 20.948/21.610/22.307/0.605 ms
If this works, then congratulations! The good news is that your first router is working. The bad news is that nothing else can use your Internet connection yet.
VyOS and OpenStack Configuration Drives
VyOS is
an open source fork of the last open source release of Vayatta, which turned proprietary a few years ago. We are currently using VyOS at work to set up OSPF routers in an OpenStack environment, and will soon have to spawn a very large amount of these in a
proof-of-concept deployment.
This describes how we add support for OpenStack’s Configuration
Drive to VyOS.
VyOS has something of an unhealthy relationship with Debian Squeeze (it is currently incompatible with newer Debian releases), and requires a Debian Squeeze installation in order to create the VyOS ISO used for deployments.
Below we will patch a post-installation script and add our own (very simple) Python-script that parses the Configuration Drive information and complies with a very small subset of what features packages like cloud-init provide.
Unfortunately, cloud-init is not available for Debian Squeeze, which is the whole reason we are doing this in the first place.
Steps:
- Install Squeeze
- Create Python script
- Run setup-script
- Import ISO into Glance
- Spawn OpenStack instance
- Verify that it works
Prepare a little Python script for parsing the OpenStack Configuration Drive metadata:
#!/usr/bin/python
import json
import shutil meta_data_file = open('/config-drive/openstack/latest/meta_data.json')
json_input = meta_data_file.read() try:
decoded = json.loads(json_input) for file in decoded['files']:
print file['content_path'], file['path']
shutil.copy2('/config-drive/openstack' + file['content_path'], file['path']) except (ValueError, KeyError, TypeError):
print "JSON format or content error"
Save this as process-openstack-metadata.py. This will be baked into the ISO in the script below as/root/vyos-init.py.
Below is a script to generate a VyOS ISO with a few modifications. Most of it is straight from the VyOS wiki page How
to build an ISO image. Read through it so you see what it does and save it as build-vyos-iso.sh, chmod it (chmod
+x build-vyos-iso.sh) and run it.
#!/bin/bash -xe apt-get install debian-archive-keyring cat >> /etc/apt/sources.list <<EOF
deb http://backports.debian.org/debian-backports squeeze-backports main
EOF apt-get update # Get backported version of squashfs
apt-get -t squeeze-backports install squashfs-tools apt-get install git autoconf automake dpkg-dev live-helper syslinux genisoimage branch=hydrogen # hydrogen = stable, helium = dev if ! test -d build-iso
then
git clone https://github.com/vyos/build-iso.git cd build-iso git branch $branch --track origin/$branch
git checkout $branch
else
cd build-iso
fi if ! test -d pkgs/vyatta-cfg-system/debian
then
git submodule update --init pkgs/vyatta-cfg-system cd pkgs/vyatta-cfg-system/ git branch $branch --track origin/$branch
git checkout $branch
else
cd pkgs/vyatta-cfg-system/
fi # Reset debian/vyatta-cfg-system.postinst.in so we can patch it again
git checkout debian/vyatta-cfg-system.postinst.in # Patch debian/vyatta-cfg-system.postinst.in
patch -p0 <<"HEREDOC"
--- debian/vyatta-cfg-system.postinst.in 2015-01-17 15:09:53.000000000 +0100
+++ debian/vyatta-cfg-system.postinst.in.patched 2015-01-17 15:11:19.000000000 +0100
@@ -143,6 +143,19 @@
# configuration is fully applied. Any modifications done to work around
# unfixed bugs and implement enhancements which are not complete in the Vyatta
# system can be placed here.
+
+mkdir /config-drive
+
+mount -o ro -t iso9660 /dev/disk/by-label/config-2 /config-drive
+
+/root/vyos-init.py
+
+configure
+load /root/configuration
+commit
+save
+
+umount /config-drive
EOF
fi HEREDOC cd - mkdir livecd/config.vyatta/chroot_local-includes/root cp ../process-openstack-metadata.py \
livecd/config.vyatta/chroot_local-includes/root/vyos-init.py chmod +x livecd/config.vyatta/chroot_local-includes/root/vyos-init.py aptitude install pdebuild-cross
make vyatta-cfg-system find pkgs -name 'vyatta-cfg-system*.deb' || \
(echo "pkgs/vyatta-cfg-system*.deb not found, exiting..."; exit 1) echo python-simplejson >> \
livecd/config.vyatta/chroot_local-packageslists/vyatta-extra.list export PATH=/sbin:/usr/sbin:$PATH
autoreconf -i
./configure
make iso ls -l livecd/binary.iso echo Done!
If everything went well you will have an ISO at ./build-iso/livecd/binary.iso.
Upload this file into OpenStack with Glance and name it “VyOS Router”:
glance image-create --name "VyOS Router" --is-public True \
--disk-format iso --container bare < ./build-iso/livecd/binary.iso
Create your own config.boot (or whatever else you want on the deployed machine):
cat > config.boot <<"EOF"
interfaces {
ethernet eth0 {
address dhcp
}
loopback lo {
}
}
service {
ssh {
port 22
}
}
system {
login {
user vyos {
authentication {
plaintext-password "demo"
}
level admin
}
}
}
EOF
Spawn an instance with a predefined flavor and our new configuration file to be included on the configuration drive:
nova boot --config-drive true --image "VyOS Router" \
--flavor <flavor> --file /root/configuration=config.boot \
--meta essential=false --nic net-id=<net-id> vyos
Verify that it works by logging into VyOS and check if the running configuration is the one you expect. You can start by checking if the file /root/configuration exists
and if it the content is what you intended.
How to debug:
vyos@vyos:~$ /usr/sbin/tcpdump -f "icmp" -i eth0
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
18:10:13.234909 IP 10.168.11.102 > 8.8.8.8: ICMP echo request, id 40962, seq 49, length 64
18:10:13.261277 IP 8.8.8.8 > 10.168.11.102: ICMP echo reply, id 40962, seq 49, length 64
18:10:14.235045 IP 10.168.11.102 > 8.8.8.8: ICMP echo request, id 40962, seq 50, length 64
18:10:14.261379 IP 8.8.8.8 > 10.168.11.102: ICMP echo reply, id 40962, seq 50, length 64
18:10:15.235249 IP 10.168.11.102 > 8.8.8.8: ICMP echo request, id 40962, seq 51, length 64
18:10:15.261549 IP 8.8.8.8 > 10.168.11.102: ICMP echo reply, id 40962, seq 51, length 64
^C
6 packets captured
6 packets received by filter
0 packets dropped by kernel
vyos@vyos:~$ /usr/sbin/tcpdump -f "icmp" -i eth1
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture size 65535 bytes
18:10:18.235887 IP XXX.XXX.187.78 > 8.8.8.8: ICMP echo request, id 40962, seq 54, length 64
18:10:18.262249 IP 8.8.8.8 > XXX.XXX.187.78: ICMP echo reply, id 40962, seq 54, length 64
18:10:19.236110 IP XXX.XXX.187.78 > 8.8.8.8: ICMP echo request, id 40962, seq 55, length 64
18:10:19.262477 IP 8.8.8.8 > XXX.XXX.187.78: ICMP echo reply, id 40962, seq 55, length 64
18:10:20.236345 IP XXX.XXX.187.78 > 8.8.8.8: ICMP echo request, id 40962, seq 56, length 64
18:10:20.262652 IP 8.8.8.8 > XXX.XXX.187.78: ICMP echo reply, id 40962, seq 56, length 64
18:10:21.236527 IP XXX.XXX.187.78 > 8.8.8.8: ICMP echo request, id 40962, seq 57, length 64
18:10:21.262927 IP 8.8.8.8 > XXX.XXX.187.78: ICMP echo reply, id 40962, seq 57, length 64
18:10:22.237082 IP XXX.XXX.187.78 > 8.8.8.8: ICMP echo request, id 40962, seq 58, length 64
18:10:22.263398 IP 8.8.8.8 > XXX.XXX.187.78: ICMP echo reply, id 40962, seq 58, length 64
^C
10 packets captured
10 packets received by filter
0 packets dropped by kernel
vyos@vyos:~$ ping 10.168.11.102
PING 10.168.11.102 (10.168.11.102) 56(84) bytes of data.
64 bytes from 10.168.11.102: icmp_req=1 ttl=64 time=0.481 ms
64 bytes from 10.168.11.102: icmp_req=2 ttl=64 time=0.559 ms
Vitual Router in The Cloud的更多相关文章
- 【Cloud Foundry】Could Foundry学习(三)——Router
在阅读的过程中有不论什么问题.欢迎一起交流 邮箱:1494713801@qq.com QQ:1494713801 一.概述 Router组件在Cloud Foundry中是对全部进来的Reque ...
- Cloud Foundry技术全貌及核心组件分析
原文链接:http://www.programmer.com.cn/14472/ 历经一年多的发展,Cloud Foundry的架构设计和实现有了众多改进和优化.为了便于大家了解和深入研究首个开源Pa ...
- Cloud Computing
More numbers, More power. We waste much more every day. Everything can be connectible through specia ...
- 看完就会的Spring Cloud Gateway
在前面几节,我给大家介绍了当一个系统拆分成微服务后,会产生的问题与解决方案:服务如何发现与管理(Nacos注册中心实战),服务与服务如何通信(Ribbon, Feign实战) 今天我们就来聊一聊另一个 ...
- 一:Neutron实现网络虚拟化
一 云计算时代数据中心物理网络的问题 数据中心虚拟化成为了趋势,最典型的场景莫过于:对数据中心的服务器进行虚拟化,来提高资源利用率,同时降低单位能耗. 但是,随着数据中心虚拟化程度的不断提高.虚拟化服 ...
- cloudstack 用admin 账号创建虚拟机只是提示insufficient resource
报错: com.cloud.exception.ResourceUnavailableException: Resource [DataCenter:1] is unreachable: Unable ...
- Solr Cloud - SolrCloud
关于 Solr Cloud Zookeeper 入门,介绍 原理 原封不动转自 http://wiki.apache.org/solr/SolrCloud/ ,文章的内存有些过时,但是了解原理. Th ...
- 基于Cloud Foundry平台部署nodejs项目上线
Cloud Foundry(以下简称CF),CF是Vmware公司的PaaS服务平台,Paas(Platform as a Service,平台即服务), 是为开发者提供一个应用运行的平台,有了这人平 ...
- Building microservices with Spring Cloud and Netflix OSS, part 2
In Part 1 we used core components in Spring Cloud and Netflix OSS, i.e. Eureka, Ribbon and Zuul, to ...
随机推荐
- struts2提交多个对象带图片
一:实体类 二:前台页面 三:Action处理
- hive1.2伪分布mysql数据库配置具体解释
hadoop2.6伪分布配置:http://blog.csdn.net/gamer_gyt/article/details/46793731 hive1.2 derby元数据库配置:http://b ...
- 0xC0000005;Access Violation(栈区空间很宝贵, linux上栈区空间默认为8M,vc6下默认栈空间大小为1M)
写C/C++程序最怕出现这样的提示了,还好是在调试环境下显示出来的,在非调试状态就直接崩溃退出. 从上述汇编代码发现在取内存地址 eax+38h 的值时出错, 那说明这个地址非法呗, 不能访问, 一般 ...
- 关于Win 10的隐私保护政策
近日.有人责备Win10收集用户信息,事实上这样的指责并不公平,比方:"Privacy Groups Claim Microsoft Uses Windows 10 as Big Broth ...
- Rails中关联数据表的添加操作(嵌套表单)
很早就听说有Web敏捷开发这回事,最近终于闲了下来,可以利用业余的时间学些新东西,入眼的第一个东东自然是Ruby on Rails.Rails中的核心要素也就是MVC.ORM这些了,因此关于Rails ...
- 关于volatile的一些思考C++
在c++中,volatile用与修饰容易变动的变量,通常用于多线程的标志,编译器会存在代码优化,假如在同一个大括号中没有修改这么一个参数,那么编译器很可能在读取这个值的时候使用的是快取的方法,即将这个 ...
- 关于getchar()的使用
'\n'表示换行.如果用键盘敲一下回车键的话,getchar会返回一个换行符.!='\n'意思是不等于换行符.ch应该是前边定义的一个char型变量, getchar()是一个从缓冲区获取字符的函数, ...
- github结合TortoiseGit使用sshkey,无需每次输入账号和密码
首先需要明确,github上支持三种方式进行项目的clone https,ssh,subversion ssh的方式 git@github.com:用户名/版本库t.git ...
- C#---爬虫抓取系列
以前就尝试过研究了一些爬虫程序,也找过一些爬虫抓取软件,效果不是很好. 今天正好一个培训的网友给了我一个视频,正好研究下,收获颇丰.感谢那位哥们~ 1.首先讨论一下抓取一个页面 这里我写了模仿写了一个 ...
- vue中使用Ueditor编辑器 -- 1
一. 下载包: 从Ueditor的官网下载1.4.3.3jsp版本的Ueditor编辑器,官网地址为:http://ueditor.baidu.com/website/download.html ...