一、开启路由转发
转自http://blog.51cto.com/zouqingyun/1697571
一组内部机器需要连接外网,则需要找一台机器,即可以连接外网,内网机器也可以连接。
因此将这台外网机器当做路由器,做路由转发
1、在需要做路由转发的机器上执行下面命令
1 |
|
若是ipv6则执行
echo 1 > /proc/sys/net/ipv6/conf/all/forwarding
但一般不建议,下次开机它又会变为0
修改它的配置文件,把net.ipv4.ip_forward = 1
1 2 3 4 5 6 7 8 9 |
|
若是ipv6,则添加net.ipv6.conf.all.forwarding=1 配置项的值
让它立即生效,就执行
1 |
|
2、紧接着我就把内网机器网关指向A的内网IP地址,结果,还是不能连接到外网,纠结许久。后面想到,才想起要在A做一个NAT转发
1 |
|
若是ipv6,则使用ip6tables。
可参考https://blog.youkuaiyun.com/hcancientmoon/article/details/40158969
ipv6相关信息可参考https://www.cnblogs.com/xiangxisheng/p/6415568.html
二、关闭ICMP重定向
ipv4:
# 关闭 icmp 的重定向
echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/eth0/send_redirects
ipv6:
echo 0 > /proc/sys/net/ipv6/conf/all/accept_redirects
echo 0 > /proc/sys/net/ipv6/conf/default/accept_redirects
echo 0 > /proc/sys/net/ipv6/conf/eth0/accept_redirects
linux内核相关可参考:https://blog.youkuaiyun.com/l0605020112/article/details/42837093?locationNum=7&fps=1
永久生效(未验证):
ipv4:
# vim /etc/sysctl.conf |
net.ipv4.conf.eth0. send_redirects= 0 |
net.ipv4.conf.eth1. send_redirects= 0 |
net.ipv4.conf.lo. send_redirects= 0 |
net.ipv4.conf. default. send_redirects= 0 |
net.ipv4.conf.all. send_redirects= 0 |
或者是accept_redirects 。
ipv6:
# vim /etc/sysctl.conf |
net.ipv4.conf.eth0. accept_redirects= 0 |
net.ipv4.conf.eth1. accept_redirects= 0 |
net.ipv4.conf.lo. accept_redirects= 0 |
net.ipv4.conf.default. accept_redirects= 0 |
net.ipv4.conf.all. accept_redirects= 0 |
参考:https://blog.youkuaiyun.com/u010391029/article/details/46441811。
疑问:accept_redirects和send_redirects的区别。
为什么v6里面只有accept_redirects,而v4里面两者都有,两者作用分别是什么。