双网卡 iptables 做网关 实现局域网其它机器上网
A机器和B机器在同一个局域网,
A机器的网卡eno1可以上网,IP为111.111.111.111。A机器的网卡eno2不能上网,IP为:192.168.1.66。
B机器不能上网,B机器的网卡eno1 IP为192.168.2.80,B机器和eno2 IP为192.168.1.80。
A机器的eno2和B机器的eno2在同一网段,可以通信,如何实现B机器通过A机器上网?
在A机器上开启转发:
vim /etc/sysctl.conf # 添加内容 net.ipv4.ip_forward=1 # 保存后执行 sysctl -p
在A机器上使用iptables转发:
iptables -t nat -A POSTROUTING -o eno1 -j MASQUERADE iptables -A FORWARD -i eno1 -o eno2 -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -A FORWARD -i eno2 -o eno1 -j ACCEPT
在B机器上配置A机器eno2为网关,并配置dns:
network: ethernets: eno1: addresses: - 192,168,2,80/24 #gateway4: 10.224.2.1 #nameservers: # addresses: [202.207.48.3, 202.207.48.4] # search: [] eno2: addresses: - 192.168.1.80/24 dhcp4: no gateway4: 192.168.1.66 nameservers: addresses: - 114.114.114.114 search: [] version: 2
#########################################################################
20240321附单网卡方案:
A机器和B机器属于同一网段,单网卡,A可上网,B不能上网,A和B互通。
在A机器,start.sh,bond0为可上网IP地址对应的网卡。
#!/bin/bash PUBLIC_INTERFACE=bond0 iptables -D FORWARD -j REJECT --reject-with icmp-host-prohibited iptables -t nat -A POSTROUTING -o $PUBLIC_INTERFACE -j MASQUERADE iptables -A FORWARD -i $PUBLIC_INTERFACE -o $PUBLIC_INTERFACE -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -A FORWARD -i $PUBLIC_INTERFACE -o $PUBLIC_INTERFACE -j ACCEPT echo "NAT rules added."
在A机器,stop.sh
#!/bin/bash
service iptables restart
在A机器,check.sh
#!/bin/bash iptables -t nat -L -v iptables -L FORWARD -v
在B机器,start.sh
#!/bin/bash ip route del default via 172.24.193.1 ip route add default via 172.24.193.3 echo "Default gateway reset to 172.24.193.3."
在B机器,stop.sh
#!/bin/bash ip route del default via 172.24.193.1 ip route add default via 172.24.193.3 echo "Default gateway reset to 172.24.193.3."