Pages

Sunday, February 16, 2020

dreamcast.local V - Phantasy Star Online Ver. 2

With my prior articles about my little dreamcast.local project, you are now set to get back online with Phantasy Star Online Ver. 2. Phantasy Star Online Ver. 2 has a very good chance to be one of my all-time-favorite games, at least on the Dreamcast it is. There are two ways going online with Phantasy Star Online Ver. 2:

1. Visit the website, which is offline
2. Play the game online, but the official servers are offline too

With this article I will show you how to redirect the IP of the website to your local Dreamcast server and then redirect the IP of the old offline game server to the Sylverant project, to play online again.

Part I - Phantasy Star Online Ver. 2 website

Before you try to connect to the website, login to your Dreamcast server and grep for named on the syslog file:

# tail -f /var/log/syslog | grep named
...


Next, start your Dreamcast with the game and navigate to the startscreen. The last menu entry offers you to visit the games website. In the next screen select the link to the games website, just ignore the link to the Sonicteam website. While your Dreamcast tries to connect to the games website, have an eye on your syslog and watch out for DNS queries:

# tail -f /var/log/syslog | grep named
...
Feb 16 10:07:51 localhost named[681]: client @0xb164ed18 192.168.3.1#32935 (ppp0.dreamcast.local): query: ppp0.dreamcast.local IN A + (192.168.3.1)
Feb 16 10:07:51 localhost named[681]: client @0xb164ed18 192.168.3.1#54245 (ppp0): query: ppp0 IN A + (192.168.3.1)
Feb 16 10:07:51 localhost named[681]: resolver priming query complete
Feb 16 10:07:51 localhost named[681]: client @0xb0f17918 192.168.3.1#52733 (ppp0.dreamcast.local): query: ppp0.dreamcast.local IN A + (192.168.3.1)
Feb 16 10:07:51 localhost named[681]: client @0xb0f17918 192.168.3.1#56616 (ppp0): query: ppp0 IN A + (192.168.3.1)
Feb 16 10:07:52 localhost named[681]: client @0xb0f17918 192.168.3.1#38280 (ppp0.dreamcast.local): query: ppp0.dreamcast.local IN A + (192.168.3.1)
Feb 16 10:07:52 localhost named[681]: client @0xb0e01ec8 192.168.3.1#56051 (ppp0): query: ppp0 IN A + (192.168.3.1)
Feb 16 10:07:54 localhost named[681]: client @0xb0e01ec8 172.16.12.2#1409 (pso.dricas.ne.jp): query: pso.dricas.ne.jp IN A + (192.168.3.1)
Feb 16 10:07:54 localhost named[681]: resolver priming query complete
...


The log above indicates that the dreamcast is trying to connect to pso.dricas.ne.jp, but can not resolve it correctly. Try it with dig and you won't get an answer:

# dig +short pso.dricas.ne.jp

And at this point you have to tweak your bind a little. Fist add a new zone in the named.conf file to be able to resolve the address:

# vi /etc/bind/named.conf
...
zone "pso.dricas.ne.jp" {
        type master;
        notify no;
        file "/etc/bind/zones/pso.dricas.ne.jp";
};


Next create the actual zone file:

# vi /etc/bind/zones/pso.dricas.ne.jp
$ORIGIN pso.dricas.ne.jp.
$TTL 604800
@       IN      SOA     dcs01.dreamcast.local.  root.dreamcast.local. (
                                85; serial
                                28800; refresh (8 hours)
                                7200; retry (2 hours)
                                604800; expire (1 week)
                                10800; minimum (3 hours)
                                );

pso.dricas.ne.jp.       IN      NS      dcs01.dreamcast.local.
pso.dricas.ne.jp.       IN      MX 10   dcs01.dreamcast.local.

@                       IN      A       192.168.3.1


Now restart bind:

# systemctl restart bind9

And check if you get an answer for pso.dricas.ne.jp with dig:

# dig +short pso.dricas.ne.jp
192.168.3.1


Perfect, the IP for pso.dricas.ne.jp is now redirected to your local Dreamcast server. Next problem: you still don't have any website available. But this can be easily resolved with the Nginx configuration I showed you in Part III of this series. First create a new block server configuration for the pso.dricas.ne.jp website:

# vi /etc/nginx/sites-available/pso.dricas.ne.jp
server {
  listen 80;
  listen [::]:80;

  server_name pso.dricas.ne.jp;

  root /var/www/pso.dricas.ne.jp;
  index index.html;
  autoindex on;

  location / {
    try_files $uri $uri/ =404;
  }
}


And link it to the enable-sites folder:

# ln -s /etc/nginx/sites-available/pso.dricas.ne.jp /etc/nginx/sites-enabled/

Then create the folder, which will contain your website files as configured in the above configuration file:

# mkdir -p /var/www/pso.dricas.ne.jp

And create a sample index.html file again:

# vi /var/www/pso.dricas.ne.jp/index.html
<html>
<head>
<title>pso.dricas.ne.jp</title>
</head>
<body>
<h1>pso.dricas.ne.jp</h1>
</body>
</html>


Restart the Nginx webserver:

# systemctl restart nginx

If you want to you can check the new pso.dricas.ne.jp webiste with links or lynxon your Dreamcast server:

# links pso.dricas.ne.jp

You should see the title of the webiste in the upper right corner, the next line is the heading already. If you connect with your Dreamcast again and visit the games website, then it will look like this now:


I have recovered a few files from web.archive.org for pso.dricas.ne.jp for the startpage and now my game website looks like this already:


The original website also tries to load some files from sonic.dricas.ne.jp, but since this website is not available online and is not part of this article, these files will not be loaded.
That's it for the first part of this article, next part will be about playing some Phantasy Star Online Ver. 2 again.

Part II - Phantasy Star Online Ver. 2 online gaming

In this part of this article I will mostly do what I have done already in the first part:

  1. figure out the adress where the game wants to connect
  2. reconfigure bind and manipulate the IP for the adress
  3. go online and play

Nginx configuration for another website is not required. Let's get started again by having an eye on syslog:

# tail -f /var/log/syslog | grep named
...


Now, start your Dreamcast, go the startscreen, select "Continue", load your character, select "Online game", confirm three more screens and go online. As I said, keep an eye on syslog:

# tail -f /var/log/syslog | grep named
...
Feb 16 11:09:24 localhost named[1548]: client @0xb167cd38 192.168.3.1#33117 (ppp0.dreamcast.local): query: ppp0.dreamcast.local IN A + (192.168.3.1)
Feb 16 11:09:24 localhost named[1548]: client @0xb167cd38 192.168.3.1#58911 (ppp0): query: ppp0 IN A + (192.168.3.1)
Feb 16 11:09:24 localhost named[1548]: client @0xb167cd38 192.168.3.1#56116 (ppp0.dreamcast.local): query: ppp0.dreamcast.local IN A + (192.168.3.1)
Feb 16 11:09:24 localhost named[1548]: client @0xb167cd38 192.168.3.1#33800 (ppp0): query: ppp0 IN A + (192.168.3.1)
Feb 16 11:09:24 localhost named[1548]: client @0xb0c022d0 192.168.3.1#59741 (ppp0.dreamcast.local): query: ppp0.dreamcast.local IN A + (192.168.3.1)
Feb 16 11:09:24 localhost named[1548]: client @0xb1684bb0 192.168.3.1#57267 (ppp0): query: ppp0 IN A + (192.168.3.1)
Feb 16 11:09:38 localhost named[1548]: client @0xb0c022d0 172.16.12.2#1089 (master.pso.dream-key.com): query: master.pso.dream-key.com IN A + (192.168.3.1)
Feb 16 11:09:38 localhost named[1548]: resolver priming query complete
...


Basically, the output is the same as for the website, with one mayor difference: instead of pso.drics.ne.jp the game tries to connect to master.pso.dream-key.com - which will fail for the moment. But we have the adress now and can manipulate the IP again.
First, configure bind and add the new zone again:

# vi /etc/bind/named.conf
...
zone "master.pso.dream-key.com" {
        type master;
        notify no;
        file "/etc/bind/zones/master.pso.dream-key.com";
};


Next create the actual zone file again:

# vi /etc/bind/zones/master.pso.dream-key.com
$ORIGIN master.pso.dream-key.com.
$TTL 604800
@       IN      SOA     dcs01.dreamcast.local.  root.dreamcast.local. (
                                85; serial
                                28800; refresh (8 hours)
                                7200; retry (2 hours)
                                604800; expire (1 week)
                                10800; minimum (3 hours)
                                );

master.pso.dream-key.com.       IN      NS      dcs01.dreamcast.local.
master.pso.dream-key.com.       IN      MX 10   dcs01.dreamcast.local.

@                       IN      A       138.197.20.130


One thing I want to point out is the IP which I am using for master.pso.dream-key.com. This time I don't use the Dreamcast servers local IP 192.168.3.1, but the IP 138.197.20.130 to connect to the private Sylverant game server. Restart bind again and check if master.pso.dream-key.com gets resolved "correctly":

# systemctl restart bind9
# dig +short master.pso.dream-key.com
138.197.20.130


And this is it already again, start the game, connect to the network and enjoy some good old Phantasy Star Online Ver. 2 on your Dreamcast - online again!
Best part for me with this method, you don't need any cheatcodes, modify your Dreamcast hardware, manipulated games discs and so on. Just start the game and connect to the network - just like in the goold old days!
And this how it looks again on my Dreamcast with the Sylverant game server:



When I am playing online, I am mostly on the ship "Altimira", Block01. Feel free to contact me while playing!

Links:
https://web.archive.org/
https://sylverant.net/

No comments:

Post a Comment