centos7作为网关
目录
1 网关服务器配制
假设该机的ip地址是10.176.22.33
-
开启ip转发
echo "1" > /proc/sys/net/ipv4/ip_forward
-
让他生效。
sysctl -p
-
设置iptables规则
sudo iptables -F sudo iptables -P INPUT ACCEPT sudo iptables -P FORWARD ACCEPT sudo iptables -t nat -A POSTROUTING -o eno1 -j MASQUERADE
最后一条有个eno1是你机器的网口名 你看下你机器网口名是啥 然后改下就行
2 网关服务器配制
2.1 ubuntu配制
编辑/etc/netplan/里面的配制文件
## This is the network config written by 'subiquity'
network:
ethernets:
eno1:
dhcp4: no
dhcp6: no
addresses:
- 10.176.22.207/24
- 2001:DA8:8001:7B22::207/64
nameservers:
addresses:
- 202.120.224.6
routes:
- to: 0.0.0.0/0
via: 10.176.22.33
metric: 50
- to: 10.0.0.0/8
via: 10.176.22.1
metric: 50
- to: ::/0
via: 2001:DA8:8001:7B22::1
metric: 70
eno2:
dhcp4: true
eno3:
dhcp4: true
eno4:
dhcp4: true
ens2f0:
dhcp4: no
addresses: [192.168.2.207/24]
nameservers:
addresses: [202.120.224.6]
routes:
- to: 0.0.0.0/0
via: 192.168.2.1
metric: 50
ens2f1:
dhcp4: true
version: 2
其中10.176.22.33为局域网作为网关的机器。
记得配制一条10.0.0.0/8的路由,防止局域网内其他主机无法直接访问这台机器。
2.2 centos配制
-
把你上网的网卡的配置文件(
/etc/sysconfig/network-scripts/ifcfg-em3
)里的GATEWAY改为10.176.22.33
-
增加一条路由,防止局域网的其他机器不能访问你。
ip route add 10.0.0.0/8 via 10.176.22.1 dev em3
-
如果出现
RTNETLINK answers: Network is unreachable
,在增加一条路由ip route add 10.176.22.1/32 dev em3
2.3 不改变网关,只配制路由
ip route add 0.0.0.0/0 via 10.176.22.33
ip route add 10.0.0.0/8 via 10.176.22.1
2.4 一些我想记录的命令
ip route add 10.176.22.1/32 dev br0
ip route add 10.0.0.0/8 via 10.176.22.1 dev br0
3 使用容器作为网关
3.1 创建macvlan网络
-
(可选)让docker监听ipv6。
编辑etc/docker/daemon.json文件
{ "ipv6": true, "fixed-cidr-v6": "2001:DA8:8001:7B22:200::/80" }
重启docker
sudo systemctl restart docker
-
创建macvlan
没有ipv6的版本
docker network create -d macvlan \ --subnet=10.176.22.0/24 \ --gateway=10.176.22.1 \ -o parent=em1 \ -o macvlan_mode=bridge macnet
有ipv6的版本
docker network create -d macvlan --ipv6 \ --subnet=10.176.22.0/24 \ --gateway=10.176.22.1 \ --subnet=2001:DA8:8001:7B22:200::/80 --gateway=2001:DA8:8001:7B22:200::1 \ -o parent=em1 \ -o macvlan_mode=bridge macnet
注意看含义,有的值需要变
3.2 设置容器
-
采用centos作为容器
docker pull centos:centos7.9.2009
-
创建容器
docker run --name rui -it -d --network macnet --privileged --ip 10.176.22.208 centos:centos7.9.2009 /bin/bash
-
进入容器后, 先更换源
cp -r /etc/yum.repos.d /etc/yum.repos.d.bak sed -e 's|^mirrorlist=|## mirrorlist=|g' \ -e 's|^## baseurl=http://mirror.centos.org|baseurl=https://mirrors.bfsu.edu.cn|g' \ -i.bak \ /etc/yum.repos.d/CentOS-*.repo yum update
安装一些工具
yum install -y iproute iproute-doc
-
像上面一样开启转发
echo "1" > /proc/sys/net/ipv4/ip_forward sysctl -p
-
像上面一样设置iptables
iptables -F iptables -P INPUT ACCEPT iptables -P FORWARD ACCEPT iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
-
这就设置好了。
-
把当前容器作为镜像
docker commit -a "ruiRay" -m "a centos gateway " f4d2c6a1070d centos_gateway:20230225
-
用当前容器重新创建一个测试
docker run --name rui -it -d --network macnet --privileged --ip 10.176.22.209 centos_gateway:20230225 /bin/bash
-
发现并不起作用,进入容器查看iptables表发现少了一条记录,于是再次添加
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
添加以后就能正常使用,还不清楚错误的原因。是不是没有保存?/etc/init.d/iptables save
-
把镜像上传到dockerhub方便下次使用。
docker login ## 输入帐号密码登录
在官网上创建一个仓库叫做ruiray/centos_gateway:
把本地镜像的名字命名为Docker ID/仓库名
docker tag centos_gateway:20230225 ruiray/centos_gateway:20230225
推送到远端
docker push ruiray/centos_gateway:20230225
验证一下
docker inspect ruiray/centos_gateway:20230225
-
基于alpine制作的方法也一样,创建一个容器,进入执行如下命令
set -eux && sed -i 's/dl-cdn.alpinelinux.org/mirrors.sjtug.sjtu.edu.cn/g' /etc/apk/repositories apk add iptables iptables -F iptables -P INPUT ACCEPT iptables -P FORWARD ACCEPT iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
4