我已经设置了 Ubuntu 服务器并设置了 ufw 作为防火墙。
首先,我有两个网络:
公众:66.xxx.xxx.70 - 66.xxx.xxx.78
私人:192.168.3.1 - 192.168.3.255
我的网络配置:
auto eth0
iface eth0 inet static
address 66.xxx.xxx.70
netmask 255.255.255.0
network 66.xxx.xxx.0
broadcast 66.xxx.xxx.255
gateway 66.xxx.xxx.1
auto eth0:0
iface eth0:0 inet static
address 66.xxx.xxx.71
netmask 255.255.255.0
broadcast 66.xxx.xxx.255
network 66.xxx.xxx.0
auto eth0:1
iface eth0:1 inet static
address 66.xxx.xxx.72
netmask 255.255.255.0
broadcast 66.xxx.xxx.255
network 66.xxx.xxx.0
auto eth0:2
iface eth0:2 inet static
address 66.xxx.xxx.73
netmask 255.255.255.0
broadcast 66.xxx.xxx.255
network 66.xxx.xxx.0
auto eth0:3
iface eth0:3 inet static
address 66.xxx.xxx.74
netmask 255.255.255.0
broadcast 66.xxx.xxx.255
network 66.xxx.xxx.0
auto eth0:4
iface eth0:4 inet static
address 66.xxx.xxx.75
netmask 255.255.255.0
broadcast 66.xxx.xxx.255
network 66.xxx.xxx.0
auto eth0:5
iface eth0:5 inet static
address 66.xxx.xxx.76
netmask 255.255.255.0
broadcast 66.xxx.xxx.255
network 66.xxx.xxx.0
auto eth0:6
iface eth0:6 inet static
address 66.xxx.xxx.77
netmask 255.255.255.0
broadcast 66.xxx.xxx.255
network 66.xxx.xxx.0
auto eth0:7
iface eth0:7 inet static
address 66.xxx.xxx.78
netmask 255.255.255.0
broadcast 66.xxx.xxx.255
network 66.xxx.xxx.78
auto eth1
iface eth1 inet static
address 192.168.3.3
netmask 255.255.255.0
broadcast 192.168.3.255
network 192.168.3.0
我开始创建防火墙来限制所有传入流量并允许所有传出流量:
sudo ufw default deny
sudo ufw allow from 192.168.3.0/24
从那时起,我努力进行 IP 转发设置,但设法找到了四行有效的代码(我创建了一个启动脚本,但抽象了以下内容):
echo "1" > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
好的,此时一切正常。我可以设置 192.168.3.* 网络上的任何机器,以使用此 Ubuntu 服务器作为网络网关 (192.168.3.3),然后我可以路由到互联网,浏览网页并验证我的 IP 是 66.xxx.xxx.70。
现在,我尝试将接口更改为 eth0:7(在启动时重新启动,甚至删除启动并手动运行它),这样我的 IP 就是 66.xxx.xxx.78,但是在我运行脚本后,IP 转发不起作用,我无法 ping 通,tracert 在 192.168.3.3 停止,当然我无法浏览网页。
虽然我可以切换主 IP 地址来解决问题,但我想知道哪里出了问题,为什么我不能指定 eth0:7 以及如何修复它。我是 Linux 新手,所以我很挣扎。任何帮助都将不胜感激。
答案1
事实证明,iptables 不支持虚拟 ip 别名(eth0:7)。
为了解决我的问题,我将机器的主 IP 地址设为 66.xxx.xxx.78,并将 .70 绑定到 eth0:7,我的问题就解决了。
因为这是一个 Ubuntu VM,所以我认为我可能只需要添加第三张网卡并将 66.xxx.xxx.78 绑定到它,然后更改我正在转发的适配器。