我在 Solaris 盒子上有 2 个接口
# ifconfig -a
lo0: flags=2001000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL> mtu 8232 index 1
inet 127.0.0.1 netmask ff000000
hme0: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 2
inet 192.168.1.41 netmask ffffff00 broadcast 192.168.1.255
ether x:x:x:x:x:x
hme1: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 3
inet 192.168.1.42 netmask ffffff00 broadcast 192.168.1.255
ether x:x:x:x:x:x
# netstat -rn
Routing Table: IPv4
Destination Gateway Flags Ref Use Interface
-------------------- -------------------- ----- ----- ------ ---------
192.168.1.0 192.168.1.41 U 1 91 hme0
192.168.1.0 192.168.1.42 U 1 0 hme1
224.0.0.0 192.168.1.41 U 1 0 hme0
default 192.168.1.1 UG 1 91
127.0.0.1 127.0.0.1 UH 1 0 lo0
hme0 是默认接口,但我想指定主机 192.168.1.32 使用接口 hme1。我尝试使用
route add 192.168.1.32 192.168.1.42 -interface hme1
但返回
hme1: bad value
知道如何解决吗?
答案1
似乎所有答复只适用于 Linux 平台。
但是在 Solaris 10 上,我发现以下命令可以工作:
route -p <add/delete> <hostname> <gateway> -ifp <interface>
答案2
l1x 的解决方案是正确的,但它存在一些问题;一侧的其他主机hme0
无法访问192.168.1.32
,并且192.168.1.32
可能无法访问其他主机。
如果这是个问题,那是因为你的网络掩码显示192.168.1.*
连接到两个都网络,但事实并非如此。也许您想在没有子网的情况下执行此操作,并将掩码设置为255.255.255.255
允许您创建路由没有線-interface
。
也许您可以使用192.168.2.*
一侧,并路由另一侧,尽管您需要访问权限才能在路由器上创建路由,或者重新配置192.168.1.*
网络上的所有机器以了解此路由。
如果这两件事你都做不到,你也许可以创建一座桥梁。
如果你不介意修补你的内核并加载 alpha 质量的驱动程序,你可以制作一个以太网桥(另见RBridge)。
如果仅 IP 解决方案足够,您可以使用代理 arp 和 IP 转发来构建一个原始的仅 IP 桥。从以下开始:
arp -s 192.168.1.32 macaddress-of-hme0 pub
route add 192.168.1.32 secretip
ndd -set /dev/ip ip_forawrding 1
在 Solaris 下,proxy_arp 确实有问题。唯一可靠的方法是给机器 192.168.1.32 一个额外的秘密 IP 地址,例如 10.5.3.2仅有的用于此。
,-----, hme1,-----, hme0
|hostA|-------------|hostB |----------- ?
`-----' `-----'
192.168.1.32 192.168.1.41
10.5.3.2 192.168.1.42
10.5.3.1
虽然在此配置中,“hostB”不需要两者192.168.1.41
和 192.168.1.42
。
答案3
这将是 Solaris 10 上的命令:
route add 192.168.1.32 192.168.1.42 -interface
您不需要在参数 -interface 后添加接口名称,因为 IP 地址 192.168.1.42 已经隐含地表示使用 hme1。
问候,
答案4
试试这个:route add-net 192.168.1.0-netmask 255.255.255.0-interface 192.168.1.42