Ubuntu下绑定静态arp,且重启不失效的方法

前言:最近准备在家里的台式机上搭建一个嵌入式学习&开发环境,装好虚拟机Ubuntu后,想要完成:开发板–windows–Ubuntu三者互通,从而方便共用SecureCRT来统一控制。然鹅,本机PC和Ubuntu死活ping不通(注意:开发板和PC,开发板和Ubuntu是通的,也就是说并不是网上说的一大堆噼里啪啦防火墙360限制问题,检查虚拟机网络连接也没问题,其他任何外网都能ping通,但就是无法ping通PC ip)。
折腾了好几天,后来抓包发现PC端的ping包是有发出去且Ubuntu也收到了来自PC的包,但Ubuntu这边的ping response包发到了我的sky天翼网关上去了。。。一万只草泥马。而arp广播也没有到正确的回应,使用arp -a查看列表也确实没有,猜测是因为我这个拓扑的问题(为了不用每次上网都短信验证,我在天翼网关机顶盒里面设置了PC以及Ubuntu的白名单条目),因此直接手动添加了静态arp条目:

arp -s ip mac

但该方法重启后就失效了,那么问题来了,如何才能在重启后依然有效呢?

1.查看arp信息

llcc2012@ubuntu:~$ arp
Address                  HWtype  HWaddress           Flags Mask            Iface
192.168.10.51            ether   70:4d:7b:2b:fd:2e   CM                    ens33
gateway                  ether   88:cc:45:18:0a:6e   C                     ens33
llcc2012@ubuntu:~$

其中各列信息说明:
Address:主机的IP地址
Hwtype:主机的硬件类型
Hwaddress:主机的硬件地址
Flags Mask:记录标志,”C”表示arp高速缓存中的条目,”M”表示静态的arp条目。
Iface:绑定的接口类型

2.新建一个静态的mac–>ip对应表文件
先看实现代码:

llcc2012@ubuntu:~$ sudo sh -c "echo '192.168.10.51 70:4d:7b:2b:fd:2e' > /etc/ip-mac"
llcc2012@ubuntu:~$ more /etc/ip-mac
llcc2012@ubuntu:~$ 192.168.10.51 70:4d:7b:2b:fd:2e

注意:用sudo sh -c是为了让整个命令具有root权限(也可以先sudo -s切换为root状态在进行操作)。

3.设置开机自动绑定
先看代码:

root@ubuntu:~# echo 'sudo arp -f /etc/ip-mac' >> /etc/rc.local

Ubuntu在重启后应该是会执行rc.local中的代码,然后完了发现重启后通过arp查看并没有生效(可能是因为我这个Ubuntu版本已经不再是采用Sysinit的初始化方式,而rc.local也不是软链接,因此没有自动执行吧)。怎么办呢?那就在profile里面添加吧:

root@ubuntu:~# echo /etc/rc.local >> /etc/profile && source /etc/profile

/etc/profile 这个文件是每个用户登录时都会运行的环境变量设置,当用户第一次登录时,该文件被执行. 并从/etc/profile.d目录的配置文件中搜集shell的设置。
心想这样应该可以了吧,但重启后发现依然有问题,提示:“sudo: no tty present and no askpass program specified”,这是由于帐号并没有开启免密码导致的,算了反正以后每次输入sudo命令都要输入一次密码,未免有些麻烦,因此关掉了所有需要输密码的地方:

root@ubuntu:~# vi /etc/sudoers

在打开的文件里最后一行添加:

llcc2012 ALL = NOPASSWD: ALL

重启后,不在有错误提示,查看arp,OK,大功告成!

你可能感兴趣的:(Linux)