跳转到内容

IP转发:修订间差异

维基百科,自由的百科全书
删除的内容 添加的内容
Low power留言 | 贡献
Solaris:​ 增加或调整参考来源 language=en
无编辑摘要
 
(未显示2个用户的3个中间版本)
第1行: 第1行:
{{NoteTA
|G1=IT
|G2=Windows
|1= zh-hans:禁用; zh-hant:停用;
}}
操作系统拥有 '''IP转发({{Lang-en|IP forwarding}})'''功能,意味着该系统能接收从接口传送进来的 网络数据包({{Lang-en|network packets}}),如果识别到该数据包不用于该系统自身,那么系统将会将该网络数据包传送到另外一个网络去,用恰当地方式转发该数据包。<ref name=":0">{{Cite web|title=What is and how do I enable IP forwarding on Linux?|url=https://openvpn.net/faq/what-is-and-how-do-i-enable-ip-forwarding-on-linux/|accessdate=2020-03-19|work=OpenVPN|archive-date=2020-03-19|archive-url=https://web.archive.org/web/20200319155656/https://openvpn.net/faq/what-is-and-how-do-i-enable-ip-forwarding-on-linux/|dead-url=no}}</ref>
操作系统拥有 '''IP转发({{Lang-en|IP forwarding}})'''功能,意味着该系统能接收从接口传送进来的 网络数据包({{Lang-en|network packets}}),如果识别到该数据包不用于该系统自身,那么系统将会将该网络数据包传送到另外一个网络去,用恰当地方式转发该数据包。<ref name=":0">{{Cite web|title=What is and how do I enable IP forwarding on Linux?|url=https://openvpn.net/faq/what-is-and-how-do-i-enable-ip-forwarding-on-linux/|accessdate=2020-03-19|work=OpenVPN|archive-date=2020-03-19|archive-url=https://web.archive.org/web/20200319155656/https://openvpn.net/faq/what-is-and-how-do-i-enable-ip-forwarding-on-linux/|dead-url=no}}</ref>


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


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

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

== 启用/禁用IP转发 ==
=== Linux ===
=== Linux ===
可通过设置[[sysctl]]项<code>net.ipv4.ip_forward</code>为1来启用[[IPv4]]转发。在大多数的发行版中,可以修改配置档案<code>/etc/sysctl.conf</code>来持久化设置该sysctl项,例如:<ref name=":0" />
可通过设置[[sysctl]]项<code>net.ipv4.ip_forward</code>为1来启用[[IPv4]]转发。在大多数的发行版中,可以修改配置档案<code>/etc/sysctl.conf</code>来持久化设置该sysctl项,例如:<ref name=":0" />
第18行: 第29行:
可通过设置[[sysctl]]项<code>net.inet.ip.forwarding</code>为1来启用IPv4转发,设置<code>net.inet6.ip6.forwarding</code>为1来启用[[IPv6]]转发。
可通过设置[[sysctl]]项<code>net.inet.ip.forwarding</code>为1来启用IPv4转发,设置<code>net.inet6.ip6.forwarding</code>为1来启用[[IPv6]]转发。


要持久性启用IP转发,可将该sysctl设置加入<code>/etc/sysctl.conf</code>档案;对于[[FreeBSD]]系统,应在<code>/etc/rc.conf</code>中设置<code>gateway_enabled="YES"</code>来持久地启用转发。<ref>{{cite web |author1=Coranth Gryphon |title=FreeBSD 使用手册 |url=https://docs.freebsd.org/zh_CN/books/handbook/network-routing.html |website=FreeBSD Documentations |publisher=The FreeBSD Documentation Project |accessdate=2021-06-12 |page=32.2.4. 建立路由器 |language=zh-hans |date=2020-12-24 |quote=这个选项会把sysctl(8) 变量――net.inet.ip.forwarding 设置成 1。}}</ref>
要持久性启用IP转发,可将该sysctl设置加入<code>/etc/sysctl.conf</code>档案;对于[[FreeBSD]]系统,应在<code>/etc/rc.conf</code>中设置<code>gateway_enabled="YES"</code>来持久地启用转发。<ref>{{cite web |author1=Coranth Gryphon |title=FreeBSD 使用手册 |url=https://docs.freebsd.org/zh_CN/books/handbook/network-routing.html |website=FreeBSD Documentations |publisher=The FreeBSD Documentation Project |accessdate=2021-06-12 |page=32.2.4. 建立路由器 |language=zh-hans |date=2020-12-24 |quote=这个选项会把sysctl(8) 变量――net.inet.ip.forwarding 设置成 1。 |archive-date=2021-06-12 |archive-url=https://web.archive.org/web/20210612072728/https://docs.freebsd.org/zh_CN/books/handbook/network-routing.html }}</ref>


=== Solaris ===
=== Solaris ===
Solaris系统中启用或禁用IP转发的设置一般是针对各个接口的,可通过[[ifconfig]]命令来临时更改某个接口的转发设置。<ref>{{cite web |title=ifconfig(1M) |url=https://docs.oracle.com/cd/E36784_01/html/E36871/ifconfig-1m.html |website=man pages section 1M: System Administration Commands |publisher=Oracle |accessdate=2021-06-12 |date=2014 |language=en}}</ref>例如要临时地在接口<code>bge0</code>上启用转发:
Solaris系统中启用或禁用IP转发的设置一般是针对各个接口的,可通过[[ifconfig]]命令来临时更改某个接口的转发设置。<ref>{{cite web |title=ifconfig(1M) |url=https://docs.oracle.com/cd/E36784_01/html/E36871/ifconfig-1m.html |website=man pages section 1M: System Administration Commands |publisher=Oracle |accessdate=2021-06-12 |date=2014 |language=en |archive-date=2021-06-12 |archive-url=https://web.archive.org/web/20210612075027/https://docs.oracle.com/cd/E36784_01/html/E36871/ifconfig-1m.html }}</ref>例如要临时地在接口<code>bge0</code>上启用转发:
<pre>
<pre>
ifconfig bge0 router
ifconfig bge0 router
第30行: 第41行:
</pre>
</pre>


要持久地启用或禁用IPv4或IPv6转发,应使用'''ipadm(1M)'''命令。<ref>{{cite web |title=Enabling Packet Forwarding |url=https://docs.oracle.com/cd/E36784_01/html/E37475/gjuqx.html |website=Configuring and Administering Network Components in Oracle® Solaris 11.2 |publisher=Oracle |accessdate=2021-06-12 |date=2014 |language=en}}</ref>
要持久地启用或禁用IPv4或IPv6转发,应使用'''ipadm(1M)'''命令。<ref>{{cite web |title=Enabling Packet Forwarding |url=https://docs.oracle.com/cd/E36784_01/html/E37475/gjuqx.html |website=Configuring and Administering Network Components in Oracle® Solaris 11.2 |publisher=Oracle |accessdate=2021-06-12 |date=2014 |language=en |archive-date=2021-06-12 |archive-url=https://web.archive.org/web/20210612075905/https://docs.oracle.com/cd/E36784_01/html/E37475/gjuqx.html }}</ref>
例如要更改全局转发设置,使用:
例如要更改全局转发设置,使用:
<pre>
<pre>

2024年2月18日 (日) 10:19的最新版本

操作系统拥有 IP转发(英語:IP forwarding功能,意味着该系统能接收从接口传送进来的 网络数据包(英語:network packets),如果识别到该数据包不用于该系统自身,那么系统将会将该网络数据包传送到另外一个网络去,用恰当地方式转发该数据包。[1]

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

路由表

[编辑]

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

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

启用/禁用IP转发

[编辑]

Linux

[编辑]

可通过设置sysctlnet.ipv4.ip_forward为1来启用IPv4转发。在大多数的发行版中,可以修改配置档案/etc/sysctl.conf来持久化设置该sysctl项,例如:[1]

编辑 /etc/sysctl.conf 文件:

nano /etc/sysctl.conf

添加该行内容 或 去除注释该行内容:

net.ipv4.ip_forward=1

退出并保存,运行改行命令。

sysctl -p

上述方式,将会永久性地启动IP转发,并且立即生效。

BSD

[编辑]

可通过设置sysctlnet.inet.ip.forwarding为1来启用IPv4转发,设置net.inet6.ip6.forwarding为1来启用IPv6转发。

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

Solaris

[编辑]

Solaris系统中启用或禁用IP转发的设置一般是针对各个接口的,可通过ifconfig命令来临时更改某个接口的转发设置。[3]例如要临时地在接口bge0上启用转发:

ifconfig bge0 router

反之如要禁用转发:

ifconfig bge0 -router

要持久地启用或禁用IPv4或IPv6转发,应使用ipadm(1M)命令。[4] 例如要更改全局转发设置,使用:

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 进行内容扩展。

参考文献

[编辑]


  1. ^ 1.0 1.1 What is and how do I enable IP forwarding on Linux?. OpenVPN. [2020-03-19]. (原始内容存档于2020-03-19). 
  2. ^ Coranth Gryphon. FreeBSD 使用手册. FreeBSD Documentations. The FreeBSD Documentation Project: 32.2.4. 建立路由器. 2020-12-24 [2021-06-12]. (原始内容存档于2021-06-12) (中文(简体)). 这个选项会把sysctl(8) 变量――net.inet.ip.forwarding 设置成 1。 
  3. ^ ifconfig(1M). man pages section 1M: System Administration Commands. Oracle. 2014 [2021-06-12]. (原始内容存档于2021-06-12) (英语). 
  4. ^ Enabling Packet Forwarding. Configuring and Administering Network Components in Oracle® Solaris 11.2. Oracle. 2014 [2021-06-12]. (原始内容存档于2021-06-12) (英语).