IP转发

操作系统拥有 IP转发（）功能，意味着该系统能接收从接口传送进来的 网络数据包（），如果识别到该数据包不用于该系统自身，那么系统将会将该网络数据包传送到另外一个网络去，用恰当地方式转发该数据包。

一个典型的场景是需要去搭建一个路由器以连接两个不同网络。

 路由表 
当一个IP数据包抵达系统后，系统将根据该数据包的目的地址来决定是否转发该数据包，以及转发到何处。路由表提供了目的地址和转发目标（下一跳）之间的对应关系。
在大多数操作系统上可用netstat -r命令查看路由表，route命令修改路由表。

由于默认情况下系统仅通过IP数据包的目的地址来决定转发方式，对于一些路由器配置场景来说，仅配置路由表存在局限。此时应额外采用策略路由来更灵活地配置路由规则。

 启用/禁用IP转发 
 Linux 
可通过设置sysctl项net.ipv4.ip_forward为1来启用IPv4转发。在大多数的发行版中，可以修改配置档案/etc/sysctl.conf来持久化设置该sysctl项，例如：

编辑 /etc/sysctl.conf 文件：
 nano /etc/sysctl.conf
添加该行内容 或 去除注释该行内容:
 net.ipv4.ip_forward=1
退出并保存，运行改行命令。
 sysctl -p
上述方式，将会永久性地启动IP转发，并且立即生效。

 BSD 
可通过设置sysctl项net.inet.ip.forwarding为1来启用IPv4转发，设置net.inet6.ip6.forwarding为1来启用IPv6转发。

要持久性启用IP转发，可将该sysctl设置加入/etc/sysctl.conf档案；对于FreeBSD系统，应在/etc/rc.conf中设置gateway_enabled="YES"来持久地启用转发。

 Solaris 
Solaris系统中启用或禁用IP转发的设置一般是针对各个接口的，可通过ifconfig命令来临时更改某个接口的转发设置。例如要临时地在接口bge0上启用转发：
ifconfig bge0 router
反之如要禁用转发：
ifconfig bge0 -router

要持久地启用或禁用IPv4或IPv6转发，应使用ipadm(1M)命令。
例如要更改全局转发设置，使用：
ipadm set-prop -p forwarding={on|off} {ipv4|ipv6}
或者更改某个接口的转发设置，使用：
ipadm set-ifprop -m {ipv4|ipv6} -p forwarding={on|off} <interface>
以启用bge0上的IPv4转发为例：
ipadm set-ifprop -m ipv4 -p forwarding=on bge0

 内容扩展 
可通过 英文维基的IP routing 进行内容扩展。

 参考文献