《tcp/ip详解》网络环境搭建

tcpip网络环境搭建

环境

  • Vmware+Ubuntu20.04(本来想在22.04,但是失败了, 在/sys/fs/cgroup目录下没有devices)
  • 双网卡:NAT+Host-only

历程

在看刘超老师的《趣谈网络协议》的第40讲:搭建一个网络实验环境:授人以鱼不如授人以渔
用到了docker搭建多主机和网络环境,所以跟着实践,也踩了不少坑🐾。

    apt-get -y update
    apt-get -y install apt-transport-https ca-certificates curl software-properties-common
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor > docker.gpg
    mv docker.gpg /etc/apt/trusted.gpg.d/
    echo "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" > /etc/apt/sources.list.d/docker.list
    apt-get -y update
    apt-cache madison docker-ce

挑一个

apt-get -y install docker-ce=5:19.03.9~3-0~ubuntu-focal
apt-get -y install openvswitch-common openvswitch-dbg openvswitch-switch python3-openvswitch openvswitch-pki openvswitch-vtep
apt-get -y install bridge-utils
apt-get -y install arping
docker pull hub.c.163.com/liuchao110119163/ubuntu:tcpip
git clone https://github.com/popsuper1982/tcpipillustrated.git
chmod +x setupenv.sh
  • setupenv.sh文件有一处要修改,写成net1重复了吧🤔,应该是net2。
    net2
./setupenv.sh ens33 hub.c.163.com/liuchao110119163/ubuntu:tcpip
docker exec -it aix /bin/bash
  • 胜利🎉
    成功
  • 网络拓扑如图:
    topo
    整个环境搭建后所有的容器之间都可以ping通,而且都可以上网🏄‍♂️。

理解脚本在做的工作:

  • 每个节点启动一个容器,使用-privileged=true方式,-net none网络先不配置。使用add-br命令,创建两个网桥
  • pipework是命令行工具,将容器连接到两个二层网络

细节

  1. 从slip到bsdi,是P2P网络(peer to peer 点对点),需要创建一个peer的两个网卡,然后在两个Docker网络的namespace里面各塞进去一个网卡。
  2. 从sun到netb,也是通过peer网卡和ip netns的方式配置P2P网络。又因为netb两边是同一个二层网络,所以需要配置arp proxy。
  3. 为了所有的节点互通,需要配置路由策略,通过ip route命令

对于slip,bsdi的13.66网口是网关。
对于bsdi和svr4,如果去外网,sun的13.33网口是网关
对于sun,1.29网口属于上面的二层网络,如果去外网,gateway的1.4网口就是外部网关。
对于aix,solaris,gemini,如果去外网,网关是gateway的1.4网口.如果去下面的二层网口,网关是sun的1.29网口
至此,图中所有的节点都能相互访问。

  1. 怎么访问外网?

创建一个peer网卡对。一个放在gateway里面,一个放在gateway外面(放在外网的网关)。
在虚拟机上还需要配置一个iptables的地址伪装规则MASQUERADE,其实就是一个SNAT(源网络地址转换)。
外网不认识容器的地址,所以源地址不能用容器的地址,需要SNAT成为虚拟机的地址出去,回来的时候再NAT回来。

有了这个环境之后:
《TCP/IP详解》里面的所有实验都能做了,镜像已经安装tcpdump等网络工具,好,这算是一个小起点🚩。


  • 小插曲🌦️
    因为不知道怎么了,突然虚拟机里访问不到github
    选择在win主机上先clone,然后再scp拷贝到虚拟机里。
    scp
    但是,奇怪的错误出现了🥲。
root@ubuntu:/home/fyr/tcpipillustrated# ./setupenv.sh
bash: ./setupenv.sh: /bin/bash^M: bad interpreter: No such file or directory

/bin/bash^M 表示解释器路径被错误地设置为 /bin/bash 加上一个不可见的回车符(Carriage Return,CR)。因此,系统找不到这个解释器路径。
Windows 和 Linux 使用不同的换行符表示方式,Windows 使用回车符和换行符(CR+LF),而 Linux 使用换行符(LF)。
sed的替换命令,s表示替换操作,\r表示回车符,//表示为空,将回车符删除。

sed -i 's/\r//' setupenv.sh 
sed -i 's/\r//' pipework

好吧😤

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值