Workaround : If your server has many network interfaces and/or public IP addresses, you can use Network Namespaces & iptables
Lazy devs binding on 0.0.0.0 ???
No way at the moment to define the @IP address to be used by the game..
Workaround : If your server has many network interfaces and/or public IP addresses, you can use Network Namespaces & iptables
Example of script that should work
#!/bin/bash
# !!! RUN ME AS ROOT USER !!!
steamUser=steam
steamGroup=${steamUser}
steamHome=/home/${steamUser}
valheimHome=${steamHome}/valheim
valheimName=”My Server”
valheimWorld=”Dedicated”
valheimPass=”changeme!”
publicIpAddr=w.x.y.z
serverIfName=”eth0″
netNsName=”valheim_ns”
vethNetwork=10.0.0.0/24
vethRootName=”valheim_veth”
vethRootAddr=10.0.1.1
vethNsName=”valheim_ns_veth”
vethNsAddr=10.0.1.2
echo “*** steam install (if required) ***”
if [[ $(grep “${steamUser}” /etc/passwd | sed -e ‘s/:.*//’) = “${steamUser}” ]]; then
echo -e “User ${steamUser} exists”
else
useradd -m ${steamUser}
fi
if [[ ! -f ${steamHome}/steamcmd.sh ]]; then
cd ${steamHome}
curl -sqL http://”https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz” | tar zxvf –
chown ${steamUser}.${steamGroup} -R ${steamHome}
fi
echo “*** valheim install (if required) ***”
if [[ ! -d ${valheimHome} ]]; then
cat << VALHEIM_INSTALL > ${steamHome}/valheim.install.sh
#!/bin/bash
# !!! RUN ME AS ${steamUser} USER !!!
mkdir -p ${valheimHome}
cd ${steamHome}
${steamHome}/steamcmd.sh +login anonymous +force_install_dir ${valheimHome} +app_update 896660 validate +exit
VALHEIM_INSTALL
chmod 755 ${steamHome}/valheim.install.sh
chown ${steamUser}.${steamGroup} ${steamHome}/valheim.install.sh
su – ${steamUser} -c ${valheimHome}/valheim.install.sh
fi
echo “*** valheim start script ***”
cat << VALHEIM_START > ${steamHome}/valheim.start.sh
#!/bin/bash
# !!! RUN ME AS ${steamUser} USER !!!
export templdpath=\$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=./linux64:\$LD_LIBRARY_PATH
export SteamAppId=892970
echo “Updating”
cd ${steamHome}
${steamHome}/steamcmd.sh +login anonymous +force_install_dir ${valheimHome} +app_update 896660 +quit > ${steamHome}/valheim.update.log 2>&1
echo “Workaround”
cp -Rvvf ${steamHome}/linux64/steamclient.so ${valheimHome}/linux64/
echo “Starting”
cd ${valheimHome}
# NOTE: Minimum password length is 5 characters & Password cant be in the server name.
# NOTE: You need to make sure the ports 2456-2458 is being forwarded to your server through your local router & firewall.
./valheim_server.x86_64 -name “${valheimName}” -port 2456 -world “${valheimWorld}” -password “${valheimPass}” -public 1 > ${steamHome}/valheim.server.log 2>&1
export LD_LIBRARY_PATH=\$templdpath
VALHEIM_START
chmod 755 ${steamHome}/valheim.start.sh
chown ${steamUser}.${steamGroup} ${steamHome}/valheim.start.sh
echo “*** network config ***”
if [[ ! -d /sys/devices/virtual/net/${vethRootName} ]]; then
ip netns add ${netNsName}
ip link add ${vethNsName} type veth peer name ${vethRootName}
ip link set ${vethRootName} up
ip address add ${vethRootAddr}/24 dev ${vethRootName}
ip link set ${vethNsName} netns ${netNsName}
ip netns exec ${netNsName} ip link set dev lo up
ip netns exec ${netNsName} ip link set dev ${vethNsName} up
ip netns exec ${netNsName} ip address add ${vethNsAddr}/24 dev ${vethNsName}
ip netns exec ${netNsName} route add default gw ${vethRootAddr}
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A PREROUTING -d ${publicIpAddr} -p tcp -m multiport –dports 2456:2458 -j DNAT –to-destination ${vethNsAddr}
iptables -t nat -A PREROUTING -d ${publicIpAddr} -p udp -m multiport –dports 2456:2458 -j DNAT –to-destination ${vethNsAddr}
#iptables -A FORWARD -i ${serverIfName} -o ${vethRootName} -p tcp -m multiport –dports 2456:2458 -j ACCEPT
#iptables -A FORWARD -i ${serverIfName} -o ${vethRootName} -p udp -m multiport –dports 2456:2458 -j ACCEPT
iptables -A FORWARD -i ${serverIfName} -o ${vethRootName} -j ACCEPT
iptables -A FORWARD -i ${vethRootName} -o ${serverIfName} -j ACCEPT
iptables -t nat -A POSTROUTING -s ${vethNsAddr} ! -d ${vethNsAddr} -o ${serverIfName} -j SNAT –to-source ${publicIpAddr}
fi
echo “*** public address ***”
ip netns exec ${netNsName} curl -s http://ipv4.icanhazip.com
echo “*** starting server ***”
ip netns exec ${netNsName} su – ${steamUser} -c ${valheimHome}/valheim.start.sh
Usage & Notes
You should install first the following packages : lib32gcc1 tmux screen
And add something like :
/etc/systemd/system/valheim.service
–8<————————————————–
[Unit]
Description=Valheim service
Wants=network.target
After=syslog.target network-online.target
[Service]
User=root
Type=simple
Restart=on-failure
RestartSec=10
KillMode=process
WorkingDirectory=${valheimHome}
ExecStart=${theSampleScriptFullName}
[Install]
WantedBy=multi-user.target
–8<————————————————–
Do not forget to update the values of ${valheimHome} and ${theSampleScriptFullName} to the real ones
Before running :
systemctl daemon-reload
systemctl enable valheim.service
I hope you enjoy the Guide we share about Valheim – Linux Dedicated Server : How to define the Interface / public IP address to be used ?; if you think we forget to add or we should add more information, please let us know via commenting below! See you soon!
- All Valheim Posts List
Leave a Reply