Re: DHCP problem....
Yes, ok. Well the first thing is you want to use the newer client,
(dhcp-client-beta if you're running slink, dhcp-client if you're running
potato). Using the newer client is necessary because this client does not go
into the background until it gets an address (or times out, but let's
hope/assume that doesn't happen). The older client did go into the background
with the unfortunate result that samba and other network daemons that want to
know what your address is and want to look it up by host name would be started
right away before the dhcp client had time to get an address.
The next thing is to modify /etc/dhclient-script. This script is run at various
times by the dhcp client daemon in order to accomplish certain things like
setting up routes. We need to add code to it so that when dhcp acquires an IP
address it will update the /etc/hosts file to make the machine's host name
resolve to it's IP address properly. I've included my /etc/dhclient-script
which you can copy from.
"J.M. \"Jersey\" Miszczyk" wrote:
> Hello Phil,
>
> I am not that much worried about the other machines on the network, since
> they are Win systems and I am installing Samba on my machine but...... my
> machine does not even know itself :(. If I put some sort of static IP
> address into "hosts" file this IP address is used when I try to ping say,
> "elvis" and the error message that "network is unreachable" shows on my
> screen. If I ping the IP address which I pick up from running "ifconfig"
> for example, everything works fine.
> I can force network admin to give me a static address but.... this is
> besides the point <lol>... now the matter of pride is to solve the
> problem.... if you know what I mean :))).
> Jens Jorgensen mentiond about a script updating "hosts" file
> automatically... would you have any idea it should look like? :)
>
> Best regards and thank you for help :)
> "Jersey"
>
> ----------
> From: Phil Brutsche[SMTP:pbrutsch@creighton.edu]
> Sent: Wednesday, October 13, 1999 12:36 AM
> To: jersey@isys.co.za
> Cc: Debian-User
> Subject: Re: DHCP problem....
>
> A long time ago, in a galaxy far, far way, someone said...
>
> > I just installed DHCP client on Debian slink machine. It works almost
> > fine.... it just does not pick up the host name :(. It is seen on the
> > network by its IP address only. If I ping it by the name from the local
> > console it responds that the host name is not known (I removed its static
> > IP entry from the "hosts" file).
> > Any suggestions will be appreciated :)
>
> This is how I read your message:
> 1) A computer running slink called elvis (for example) uses DHCP to get
> it's IP# and related information.
> 2) Someone else on the network tries to ping elvis, and fails
> 3) Someone on elvis tries to ping elvis, and fails
>
> If this is the case, welcome to DHCP :) The reason #2 and #3 fails is
> because there is no way for another system to find out elvis' IP#, either
> because the name 'elvis' wasn't found in /etc/hosts (or the equivalent),
> or in DNS, as you found out. Your solutions are:
> 1) convince the local system administrator(s) to use Dynamic DNS. This
> allows the DHCP server to update the DNS server's IP# database
> 2) convince the local system administrator(s) to give you a static IP#
> somehow, either through DHCP by MAC address or an outright static IP#
> (no DHCP involved)
> 3) use one of the free dynamic hosting services available on the internet;
> an example is www.dhs.org
>
> --
> ----------------------------------------------------------------------
> Phil Brutsche pbrutsch@creighton.edu
>
> "There are two things that are infinite; Human stupidity and the
> universe. And I'm not sure about the universe." - Albert Einstein
--
Jens B. Jorgensen
jjorgens@bdsinc.com
#!/bin/sh
# dhclient-script for Linux. Dan Halbert, March, 1997.
# Updated for Linux 2.[12] by Brian J. Murrell, January 1999.
# No guarantees about this. I'm a novice at the details of Linux
# networking.
# Notes:
# 0. This script is based on the netbsd script supplied with dhcp-970306.
# 1. ifconfig down apparently deletes all relevant routes and flushes
# the arp cache, so this doesn't need to be done explicitly.
# 2. The alias address handling here has not been tested AT ALL.
# I'm just going by the doc of modern Linux ip aliasing, which uses
# notations like eth0:0, eth0:1, for each alias.
# 3. I have to calculate the network address, and calculate the broadcast
# address if it is not supplied. This might be much more easily done
# by the dhclient C code, and passed on.
# 4. TIMEOUT not tested. ping has a flag I don't know, and I'm suspicious
# of the $1 in its args.
update_hosts () {
if sed -e '/^[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}[[:space:]]\+.*'$(/bin/hostname)'.*/ s/^[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}/'$1'/' < /etc/hosts > /etc/hosts.new.$$
then
/bin/cp /etc/hosts /etc/hosts.old
mv /etc/hosts.new.$$ /etc/hosts
else
rm /etc/hosts.new.$$
fi
}
# Must be used on exit. Invokes the local dhcp client exit hooks, if any.
function exit_with_hooks() {
exit_status=$1
if [ -x /etc/dhclient-exit-hooks ]; then
. /etc/dhclient-exit-hooks
fi
# probably should do something with exit status of the local script
exit $exit_status
}
# set this to 1 for debug messages
DEBUG=0
[ $DEBUG = 1 ] && printf "\tCalled for reason %s on interface %s\n" $reason $interface
# Invoke the local dhcp client enter hooks, if they exist.
if [ -x /etc/dhclient-enter-hooks ]; then
exit_status=0
. /etc/dhclient-enter-hooks
# allow the local script to abort processing of this state
# local script must set exit_status variable to nonzero.
if [ $exit_status -ne 0 ]; then
exit $exit_status
fi
fi
release=`uname -r`
release=`expr $release : '\(.*\)\..*'`
relmajor=`echo $release |sed -e 's/^\([^\.]*\)\..*$/\1/'`
relminor=`echo $release |sed -e 's/^.*\.\([^\.]*\)$/\1/'`
[ $DEBUG = 1 ] && printf "\tKernel version %s.%s.x\n" $relmajor $relminor
if [ x$new_broadcast_address != x ]; then
new_broadcast_arg="broadcast $new_broadcast_address"
fi
if [ x$old_broadcast_address != x ]; then
old_broadcast_arg="broadcast $old_broadcast_address"
fi
if [ x$new_subnet_mask != x ]; then
new_subnet_arg="netmask $new_subnet_mask"
fi
if [ x$old_subnet_mask != x ]; then
old_subnet_arg="netmask $old_subnet_mask"
fi
if [ x$alias_subnet_mask != x ]; then
alias_subnet_arg="netmask $alias_subnet_mask"
fi
if [ x$reason = xMEDIUM ]; then
# Linux doesn't do mediums (ok, ok, media).
exit_with_hooks 0
fi
if [ x$reason = xPREINIT ]; then
if [ x$alias_ip_address != x ]; then
# Bring down alias interface. Its routes will disappear too.
[ $DEBUG = 1 ] && printf "\tifconfig %s:0- inet 0\n" $interface
ifconfig $interface:0- inet 0
fi
if [ $relmajor -lt 2 ] || ( [ $relmajor -eq 2 ] && [ $relminor -eq 0 ] )
then
[ $DEBUG = 1 ] && printf "\tifconfig %s inet 0.0.0.0 netmask 0.0.0.0 broadcast 255.255.255.255 up\n" $interface
ifconfig $interface inet 0.0.0.0 netmask 0.0.0.0 broadcast 255.255.255.255 up
# Add route to make broadcast work. Do not omit netmask.
[ $DEBUG = 1 ] && printf "\troute add default dev %s netmask 0.0.0.0\n" $interface
route add default dev $interface netmask 0.0.0.0
else
# added this code to fix this script for kernels greater than 2.0
[ $DEBUG = 1 ] && printf "\tifconfig %s inet 0.0.0.0 up\n" $interface
ifconfig $interface inet 0.0.0.0 up
# took this line out to fix this for kernels greater than 2.0
# ifconfig $interface up
fi
# We need to give the kernel some time to get the interface up.
sleep 1
exit_with_hooks 0
fi
if [ x$reason = xARPCHECK ] || [ x$reason = xARPSEND ]; then
exit_with_hooks 0
fi
if [ x$reason = xBOUND ] || [ x$reason = xRENEW ] || \
[ x$reason = xREBIND ] || [ x$reason = xREBOOT ]; then
if [ x$old_ip_address != x ] && [ x$alias_ip_address != x ] && \
[ x$alias_ip_address != x$old_ip_address ]; then
# Possible new alias. Remove old alias.
[ $DEBUG = 1 ] && printf "\tifconfig %s:0- inet 0\n" $interface
ifconfig $interface:0- inet 0
fi
if [ x$old_ip_address != x ] && [ x$old_ip_address != x$new_ip_address ]; then
# IP address changed. Bringing down the interface will delete all routes,
# and clear the ARP cache.
[ $DEBUG = 1 ] && printf "\tifconfig %s inet down HERE!\n" $interface
ifconfig $interface inet down
fi
if [ x$old_ip_address = x ] || [ x$old_ip_address != x$new_ip_address ] || \
[ x$reason = xBOUND ] || [ x$reason = xREBOOT ]; then
[ $DEBUG = 1 ] && printf "\tifconfig %s inet %s %s %s\n" $interface $new_ip_address $new_subnet_arg $new_broadcast_arg
ifconfig $interface inet $new_ip_address $new_subnet_arg $new_broadcast_arg
update_hosts $new_ip_address
printf "The hosts table was updated.\n"
# Add a network route to the computed network address.
if [ $relmajor -lt 2 ] || \
( [ $relmajor -eq 2 ] && [ $relminor -eq 0 ] ); then
[ $DEBUG = 1 ] && printf "\troute add -net %s %s dev %s\n" $new_network_number $new_subnet_arg $interface
route add -net $new_network_number $new_subnet_arg dev $interface
fi
for router in $new_routers; do
[ $DEBUG = 1 ] && printf "\troute add default gw %s\n" $router
route add default gw $router
done
fi
if [ x$new_ip_address != x$alias_ip_address ] && [ x$alias_ip_address != x ];
then
[ $DEBUG = 1 ] && printf "\tifconfig %s:0- inet 0\n" $interface
ifconfig $interface:0- inet 0
[ $DEBUG = 1 ] && printf "\tifconfig %s:0 inet %s %s\n" $interface $alias_ip_address $alias_subnet_arg
ifconfig $interface:0 inet $alias_ip_address $alias_subnet_arg
[ $DEBUG = 1 ] && printf "\troute add -host %s %s:0\n" $alias_ip_address $interface
route add -host $alias_ip_address $interface:0
fi
echo search $new_domain_name >/etc/resolv.conf
for nameserver in $new_domain_name_servers; do
echo nameserver $nameserver >>/etc/resolv.conf
done
exit_with_hooks 0
fi
if [ x$reason = xEXPIRE ] || [ x$reason = xFAIL ]; then
exit 0
if [ x$alias_ip_address != x ]; then
# Turn off alias interface.
[ $DEBUG = 1 ] && printf "\tifconfig %s:0- inet 0\n" $interface
ifconfig $interface:0- inet 0
fi
if [ x$old_ip_address != x ]; then
# Shut down interface, which will delete routes and clear arp cache.
[ $DEBUG = 1 ] && printf "\tifconfig %s inet down\n" $interface
ifconfig $interface inet down
fi
if [ x$alias_ip_address != x ]; then
[ $DEBUG = 1 ] && printf "\tifconfig %s:0 inet %s %s\n" $interface $alias_ip_address $alias_subnet_arg
ifconfig $interface:0 inet $alias_ip_address $alias_subnet_arg
[ $DEBUG = 1 ] && printf "\troute add -host %s %s:0\n" $alias_ip_address $interface
route add -host $alias_ip_address $interface:0
fi
exit_with_hooks 0
fi
if [ x$reason = xTIMEOUT ]; then
if [ x$alias_ip_address != x ]; then
[ $DEBUG = 1 ] && printf "\tifconfig %s:0- inet 0\n" $interface
ifconfig $interface:0- inet 0
fi
[ $DEBUG = 1 ] && printf "\tifconfig %s inet %s %s %s\n" $interface $new_ip_address $new_subnet_arg $new_broadcast_arg
ifconfig $interface inet $new_ip_address $new_subnet_arg $new_broadcast_arg
set $new_routers
############## what is -w in ping?
if ping -q -c 1 $1; then
if [ x$new_ip_address != x$alias_ip_address ] && \
[ x$alias_ip_address != x ]; then
[ $DEBUG = 1 ] && printf "\tifconfig %s:0 inet %s %s\n" $interface $alias_ip_address $alias_subnet_arg
ifconfig $interface:0 inet $alias_ip_address $alias_subnet_arg
[ $DEBUG = 1 ] && printf "\troute add -host %s dev %s:0\n" $alias_ip_address $interface
route add -host $alias_ip_address dev $interface:0
fi
if [ $relmajor -lt 2 ] || \
( [ $relmajor -eq 2 ] && [ $relminor -eq 0 ] ); then
[ $DEBUG = 1 ] && printf "\troute add -net %s\n" $new_network_number
route add -net $new_network_number
fi
for router in $new_routers; do
[ $DEBUG = 1 ] && printf "\troute add default gw %s\n" $router
route add default gw $router
done
echo search $new_domain_name >/etc/resolv.conf.std
for nameserver in $new_domain_name_servers; do
echo nameserver $nameserver >>/etc/resolv.conf.std
done
if [ -f /etc/resolv.conf ]; then
rm -f /etc/resolv.conf
ln /etc/resolv.conf.std /etc/resolv.conf
fi
exit_with_hooks 0
fi
[ $DEBUG = 1 ] && printf "\tifconfig %s inet down\n" $interface
ifconfig $interface inet down
exit_with_hooks 1
fi
exit_with_hooks 0
Reply to: