Router_config

使用虚拟机配置路由 (NAT)

主要步骤

  • 虚拟机创建一个独立网络连接 (isolated-net)
  • 在当作路由器的虚拟机这里新建网络, 选中这个isolated-net
  • 然后创建一个虚拟机, 配置网卡的时候只连接这个isolated-net, 作为内网的设备
  • 给两个设备分别配置静态ip, dns, 禁用动态ip(防止操作失败)
  • 开启路由器的NAT功能和ipv4转发
  • 进行测试

创建独立的网络

  • 这里使用 virt-manager

Edit -> Connection Details -> + -> Mode (Isolated) -> Name: isolated-net -> Finish

创建路由器虚拟机并配置网卡

  • 这里命名为router

router -> details -> Add Hardware -> Network -> source (isolated-net) -> Finish

创建内网的虚拟机

  • 命名为 inner

inner -> 创建的时候勾选 -> customize configuration before install -> Network source (isolated-net) -> Finish

配置静态ip, 禁用掉动态ip, 以及dns手动配置

注意, 这里配置静态ip的时候建议把其他无关的内容都禁用了, 防止出现问题, 也就是把动态ip禁用

开启路由器的ipv4转发和NAT

下面的操作在当作路由器的虚拟机上面进行

  • 开启 ipv4 转发

这里分为两种情况

  1. 有 /etc/sysctl.conf
echo "net.ipv4.ip_forward = 1" | sudo tee -a /etc/sysctl.conf

# 启动配置
suod sysctl -p
  1. 没有 /etc/sysctl.conf
# 新创建一个配置文件 放在 /etc/sysctl.d/ 目录下
sudo touch /etc/sysctl.conf
sudo touch /etc/sysctl.d/99-sysctl.conf

echo "net.ipv4.ip_forward = 1" | sudo tee -a /etc/sysctl.d/99-sysctl.conf

#启动配置
sudo sysctl -p
  • 设置NAT

首先查看默认的网络接口 (在路由器上执行)

ip route show default

输出如果是 default via 192.168.122.1 dev enp1s0 onlink 则网络接口就是 enp1s0

配置nftables的规则

# 在R1 & R2 上面执行

# 创建表, 指定作用范围
sudo nft add table inet my_nat

# 创建用于源ip地址转换的链, 绑定到postrouting
sudo nft add chain inet my_nat postrouing { type nat hook postrouing priority srcnat\; }

# 3. 添加源地址转换(SNAT)规则,将被允许转发的数据包的源IP改为路由器的外网IP
sudo nft add rule inet my_nat postrouting oif eth0 masquerade # 这里的eth0换成实际的网络接口
sudo vi /etc/network/interfaces

打开配置文件

找到 gateway xx.xx.xx.xx 这一行, 把后面的ipv4改成路由器的ip

# 重启使得网络配置生效
sudo systemctl restart networking
  • 测试(在内网主机上)
traceroute baidu.com
# 看到下面的这种有 _gateway的输出就没有问题了
traceroute to baidu.com (111.63.65.247), 30 hops max, 60 byte packets                                                                     
 1  _gateway (192.168.200.1)  1.491 ms  1.392 ms  1.345 ms

如果失败了, 最好的办法就是重启, 让路由器重新加载配置, 成功率大大提高哦