nat转发出网

通过 iptables/ip6tables 的 nat 转发可以实现内网主机访问公网目的, 转发的主机需要和内网主机互通,需要可以访问公网网络.

IPv4 设置

1.转发机上加一条nat转发

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth1 -j SNAT --to-source public_ip

eth1 为转发机公网的网卡, public_ip 为公网 ip 地址;

2.开启转发

sysctl -w net.ipv4.ip_forward=1

3. 确保转发机 iptables 存在 FORWARD 规则:

iptables -I FORWARD -d 192.168.1.0/24 -j ACCEPT
iptables -I FORWARD -s 192.168.1.0/24 -j ACCEPT

内网机操作: 在内网主机增加指向到转发机的路由:

ip route add default via 192.168.1.100 dev eth0

192.168.1.100 为转发机内网地址, eth0 为内网机内网网卡;

也可以将路由信息 default via 192.168.1.100 dev eth0 加到 /etc/sysconfig/network-scripts/route-eth0 中永久生效.

IPv6 设置

1.转发机上加一条nat转发, 来源的 ipv6 地址需要路由的地址, 最好是 ULA 地址:

ip6tables -t nat -A POSTROUTING -s fd00:6fef:1001:2100::/64 -o eth1 -j SNAT --to-source 2001:db8::1

eth1 为转发机公网的网卡, public_ip 为公网 ip 地址;

2.开启转发

sysctl -w net.ipv6.conf.all.forwarding = 1

3. 确保转发机 iptables 存在 FORWARD 规则:

iptables -I FORWARD -d fd00:6fef:1001:2100::/64 -j ACCEPT
iptables -I FORWARD -s fd00:6fef:1001:2100::/64 -j ACCEPT

在内网主机增加指向到转发机的路由:

ip route add default via fd00:6fef:1001:2100::1 dev eth0

fd00:6fef:1001:2100::1 为转发机内网地址, eth0 为内网机内网网卡;

总结

另外有些环境下是没有公网地址的, 比如很多的云厂商, 云主机只分配了内网地址, 公网地址则是通过映射的方式实现, 这种情况下就不能使用 nat 转发出网, 这时候就可以借助 brook 或者 proxychans-ng 等工具通过 socks4/socks5 代理转发上网. 比如将 socks5 程序运行在可以上网的机器中, 我们在不能上网的机器中运行 brook 或 proxychans-ng 即可正常上网. 有些网络环境的设置支持内网 ip 转发, 在可出网的虚拟机中, 直接按照上述的步骤进行设置, 不同的是 public_ip 修改为内网的 ip 地址.