Linux下启用IP转发功能

/ dockerLinux / 没有评论 / 2101浏览

说明:以下的操作只要在Linux下都是通用的。 Linux发行版默认情况下是不开启IP转发功能的。如果架设一个Linux路由或者VPN服务就需要开启该服务。

1、通过访问sysctl的内核ipv4.ip_forward来判断转发是否开启。(说明:现在有些网络已经普及ipv6的,所以下面的命令可以从ipv4改为ipv6即可)

使用sysctl

sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 0

或者检查/proc下的文件:

cat /proc/sys/net/ipv4/ip_forward
0

ipv4转发没有开启 (值为 0)

2、启动IP转发

通过sysctl可以开启ipv4的转发功能 (无需重启):

sysctl -w net.ipv4.ip_forward=1

或者

echo 1 > /proc/sys/net/ipv4/ip_forward

这种设置只是暂时的;它的效果会随着计算机的重启而失效。

如果想使IP转发永久生效,就请修改**/etc/sysctl.conf** ,在这里可以增加一条net.ipv4.ip_forward = 1

vi /etc/sysctl.conf
net.ipv4.ip_forward = 1

如果ipv4转发项已被设为0那么你只需要将它改为1。

3、要想是更改生效,你需要执行以下指令:

sysctl -p /etc/sysctl.conf

在红帽系列的发行版上可以通过重启网络服务使之生效:

service network restart

而在Debian/Ubuntu系列的发行版则用这样的命令:

#早期版本
/etc/init.d/procps.sh restart
#最新版本
/etc/init.d/procps restart

 # 常见失败原因:

  1. 电脑本身没有开启虚拟化支持,需要在重启时进入BIOS里设置。
  2. 配置nat转发
#查看iptables现有规则
iptables -L -n
#先允许所有,不然有可能会杯具
iptables -P INPUT ACCEPT
# 缺省允许IP转发
iptables -P FORWARD ACCEPT
# 清空所有默认规则,清除原有的filter有中的规则
iptables -F
# 清空所有自定义规则
iptables -X
 # 清除原有的nat表中的规则
iptables -t nat -F

利用iptables 实现nat MASQUERADE 共享上网,此处eth0 需要是能够访问外部网络的网卡接口

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

或者

iptables -t nat-A POSTROUTING -s 192.168.121.0/24(内网充当其他同网段内网机器的网关) -j SNAT --to 192.168.159.128(公网ip)