PSO2Proxy on Amazon AWS

2014

Since SEGA is doing dumb things with their network, Phantasy Star Online 2 players outside of Japan now need to use a VPN or Proxy to connect to the game. This guide will show you how to set up CyberKitsune’s PSO2Proxy on a private Amazon EC2 instance. This is free for a year, and hopefully more stable than some alternative proxy solutions.

What you’ll need

Before we start, get all of these:

Set up an EC2 instance

Once you have an Amazon AWS account, go to http://aws.amazon.com/ec2/ and click “Sign in to the Console”. You should see the following page. Click “EC2”.

Amazon Web Services

Create a new instance and select the Amazon Linux AMI image.

Launch Instance

Choose Image

Choose Instance Type

Follow the rest of the wizard to finish creating the EC2 instance. Make sure to download your public key (.pem) file.

Back at the EC2 Dashboard, click “Security Groups” on the left. Create a new security group and allow all incoming TCP and UDP traffic from all IPs. The outbound traffic should allow all protocols and IPs by default.

Create Security Group

Save the new security group, then click “Instances” on the left. You only have one instance, so it will already be selected. Click “Actions > Change Security Groups” and switch your instance to your newly created security group.

Change Security Groups

Change Security Groups 2

Now you should be able to connect to your EC2 instance. Follow Amazon’s instructions for connecting to your instance. You can find your public DNS at the bottom of the instances page. Your PuTTY setup should now look like this. Make sure to save these settings as a session.

PuTTY

PuTTY 2

Click “Open” and a console window should appear. Now we follow the instructions on the PSO2Proxy Github page.

Extract SEGA’s public key

Create a new file named “translation.cfg” at C:\Program Files (x86)\SEGA\PHANTASYSTARONLINE2\pso2_bin. Run your text editor as administrator and open the file. Paste the following lines into it:

PublicKeyDump:1
PublicKeyPath:SEGAKey.blob

Now run PSO2Tweaker, make sure item translations are enabled, and start PSO2. You can close PSO2 once you get to the title screen. If everything worked properly, you should now have a “SEGAKey.blob” file in your pso2_bin directory. You can now delete translation.cfg.

Install PSO2Proxy

Run the following commands from PuTTY:

sudo yum install python27 python27-pip gcc python27-devel python-twisted git
sudo easy_install-2.7 pip
git clone https://github.com/cyberkitsune/PSO2Proxy.git ~/PSO2Proxy
cd ~/PSO2Proxy
sudo pip install -r requirements.txt
cd ~/PSO2Proxy/proxy
python27 ./PSO2Proxy.py

The server won’t start up, but it will create some config files.

Open WinSCP. It will ask to import your settings from PuTTY. Do so and connect to your EC2 instance. Navigate to /home/ec2-user/PSO2Proxy/proxy/cfg. Double-click pso2proxy.config.yml and it should open in your text editor. Paste your EC2 instance’s public and private IP addresses in as follows.

admins: [your_sega_id]
bindIp: your_ec2_private_ip_here
blockNameMode: 1
commandPrefix: '!'
enabledShips: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
myIpAddr: your_ec2_public_ip_here
noisy: false

Save the file. WinSCP will automatically upload your changes.

In WinSCP, navigate to /home/ec2-user/PSO2Proxy/proxy/keys. Drag the SEGAKey.blob file you created before onto WinSCP and it will upload the file.

Go back to PuTTY. If you your cursor is on a line starting with >>>, run the following command to close PSO2Proxy.

exit

Then navigate to the keys directory:

cd keys

Now run the following commands to generate the necessary SSH keys:

openssl genpkey -out myKey.pem -algorithm rsa -pkeyopt rsa_keygen_bits:1024
openssl rsa -in myKey.pem -outform MS\ PUBLICKEYBLOB -pubout -out publickey.blob
openssl rsa -pubin -inform MS\ PUBLICKEYBLOB -in SEGAKey.blob -outform PEM -out SEGAKey.pem

Now run the following commands to enable a plug-in which allows PSO2 Tweaker to quickly configure itself:

cd ~/PSO2Proxy/proxy/plugins
ln -s disabled/WebAPI.py .

Everything should be configured now.

Start the server

Let’s create a shortcut to start the server. In WinSCP, navigate to /home/ec2-user/ and right-click the directory background. Click “New > File” and name it something like “start-proxy”. Double-click it to edit it and paste the following:

#!/bin/bash
export PYTHONIOENCODING=utf-8
 
PROXY_DIR=~/PSO2Proxy/proxy
LOG_FILE=~/PSO2Proxy.log
 
cd $PROXY_DIR
nohup python27 PSO2Proxy.py > $LOG_FILE &
tail -f $LOG_FILE

Save it and WinSCP will upload your changes. Right click the file in WinSCP and open its properties. Under the Permissions section, check all the “X” boxes. This makes the script executable so you can run it directly.

Now we can start the server from PuTTY by entering the following command:

~/start-proxy

This will start the proxy in the background and start logging its output to the screen. You are free to close PuTTY at this point. Doing so will not stop PSO2Proxy.

If you ever need to restart the EC2 instance, just connect with PuTTY and run this command to restart the proxy.

Now open your web browser to http://your-ec2-public-ip:8080/config.json (use your EC2 instance’s public IP address). If everything worked, your proxy should respond with

{"host": "your-ec2-public-ip", "version": 1, "name": "Unnamed Server", "publickeyurl": "http://your-ec2-public-ip:8080/publickey.blob"}

Configure PSO2 Tweaker

Start PSO2 Tweaker and click “Menu Orb > Other Tasks > Configure PSO2Proxy Server Settings”. When prompted, enter the config.json URL you tested earlier (http://your-ec2-public-ip:8080/config.json). PSO2 Tweaker should print out “All done! You should now be able to connect to Unnamed Server.” in the log.

You should now be able to connect to PSO2!

Extras

I get a server timed out error when logging in!

Sega’s public key has probably changed. Redo the steps above to get SegaKey.blob and upload it to your keys directory. Open PuTTY and cd to ~/PSO2Proxy/proxy/keys, then run the openssl commands listed above again.

My public IP changed!

If you stop and restart your EC2 instance, your public IP might change. If you change your start-proxy script to the following, it will automatically update pso2proxy.config.yml with your server’s private and public IP addresses.

#!/bin/bash
export PYTHONIOENCODING=utf-8
 
PROXY_DIR=~/PSO2Proxy/proxy
LOG_FILE=~/PSO2Proxy.log
CFG_FILE=$PROXY_DIR/cfg/pso2proxy.config.yml
PRIVATE_IP=$(wget -qO- http://169.254.169.254/latest/meta-data/local-ipv4)
PUBLIC_IP=$(wget -qO- http://169.254.169.254/latest/meta-data/public-ipv4)
 
sed -i -e "s/^\(bindIp:\).*$/\1 $PRIVATE_IP/" -e "s/^\(myIpAddr:\).*$/\1 $PUBLIC_IP/" $CFG_FILE
cd $PROXY_DIR
nohup python27 PSO2Proxy.py > $LOG_FILE &
tail -f $LOG_FILE

Then, you just need to go into PSO2 Tweaker and provide the address to config.json, using the new public IP that your EC2 dashboard shows.

 I need to stop the proxy

The start-proxy script I listed above will start the proxy such that it doesn’t end when you close PuTTY. If you need to stop the proxy, just run the following command from PuTTY:

sudo killall python27

How do I update the software?

Run the following commands from PuTTY:

cd ~/PSO2Proxy
git status

If you see something like this, you have the latest version of PSO2Proxy.

Your branch is up-to-date with 'origin/master'.
nothing to commit, working directory clean

If you see something like this, there are updates to download.

Your branch is behind 'origin/master' by 4 commits, and can be fast-forwarded.
  (use "git pull" to update your local branch)
nothing to commit, working directory clean

Make sure the proxy is stopped, then run the following command:

git pull

If it worked, you can now start the proxy back up. If it didn’t work, try this:

git fetch
git checkout master
git reset --hard origin/master

Revisions

Oct 14, 2014:

  • Added a solution for server timeout errors when trying to log in.

Oct 8, 2014:

  • Changed a couple lines so you don’t close PuTTY instead of PSO2Proxy in one step if PSO2Proxy has already closed itself.

Oct 2, 2014: 

  • Changed commands to install and use Python 2.7, because Amazon Linux AMI’s version of Python is ancient and might not work well with PSO2Proxy.
  • Fixed an error in the Git command.
  • Changed instructions for enabling the WebAPI plug-in to match CyberKitsune’s latest commits.
  • Improved the start-proxy script.
  • Added instructions to make start-proxy executable.
  • Added a section with extra, useful scripts.

14 thoughts on “PSO2Proxy on Amazon AWS

  1. Hey, just letting you know, I had some issues with running pip after sudo installing python27-pip. For some reason, it was not installing all dependencies correctly; I had to run this:

    sudo easy_install-2.7 pip

    In order to install all dependencies required for pip. easy_install is available on AWS, so I had no issues there. Not really an issue with your guide though, cause that is also on the github page for the proxy itself. Might just be something on my end :)

    Otherwise, great guide!

    • Thanks. I’ll add that. I added the Python 2.7 commands mostly from memory after I figured out how to install it through trial and error, so I’m not surprised I missed a step.

  2. Thanks for this tutorial, it worked great! I appreciate your hard work.

    One quick question:
    1) Once the PSO2 Tweaker connectivity feature has been enabled, will it download the patches/updates through the AWS EC2 Instance?

    • I don’t think so.

      I believe PSO2 Tweaker is able to download patch files without the use of a proxy. Either Sega is hosting the files on a server with a valid route, or Aida has arranged for the files to be mirrored elsewhere.

  3. I can’t get Sega’s public key. Nothing shows up after I make the cfg file and start pso2 through the tweaker(item translations are on). If it matters, I use cyberkitsune’s proxy server so I have his .blob file there. Any ideas on what to do?

  4. im having some trouble getting it working, i followed the steps and it worked up until Tuesdays maintenance but now any time i try to log on and use it it says server timed out. any idea why or how to fix it?

  5. Hi, I dont really know about this kind of things so I have some questions:

    -How does AWS really works? Does It gives you a certain amount of data that can get in and out or does it give you a certain amount of time that you can use it?

    -I´m planning on getting one for my team (mostly for 4 persons) so can it handle? and how it will behave the amount of time or data that they give you when more than one person use it at the same time?

    -How much it matter that I leave it on all the time or Do I have to turn it off when we stop playing?

    Sorry for too many questions thanks in advance. :)

    • You are billed for the amount of time your server runs times the number of instances of it you run. You only need a single instance for this, so the second part isn’t an issue.

      You can shut the server down when you aren’t using it to pay less, but the server’s public IP address will probably change and you’ll have to reconfigure it in the Tweaker each time you restart the server.

Leave a Reply

Your email address will not be published. Required fields are marked *